0、寫在前面
作爲一名開發者,熟悉使用 git 代碼管理工具是一項必備的基本技能。git 相較 SVN 而言,其優點不言而喻。git 的功能非常強大,其包括的操作命令也非常的多,但是從實用性而言,很多命令可能我們一輩子也用不到,這裏我只記錄一下自己經常使用的 git 命令,熟練使用了這些命令,其實已經可以完全得心應手的使用 git 工具了。我所使用的開發環境是在 CentOS6.5 系統,下邊的操作命令都是在 CentOS6.5 上進行實驗通過的。
一、GIT的初始化及配置
1.git安裝
- yum方式安裝:
$ yum install git -y
- apt方式安裝:
$ apt install git -y
- 源碼方式安裝:
$ ./configure && make && make install
2.git全局配置
$ git config --global user.name "liwei0526vip"
$ git config --global user.email "[email protected]"
通過git config
命令的--global
參數設置了git的用戶名和用戶郵箱,默認情況下這臺機器上所有的git倉庫都會使用這個配置,當然也可以對某個倉庫指定具體不同的用戶名和用戶郵箱
3.初始化倉庫
倉庫,英文名repository。可以簡單理解成一個目錄,這個目錄裏面的所有文件都可以被git管理起來,每個文件的修改、刪除,git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以"還原"。
$ mkdir learngit
$ cd learngit
$ git init
Initialized empty Git repository in /root/learngit/.git/
$ ls -a
. .. .git
可以發現當前目錄下多了一個.git
的目錄,這個目錄是git來跟蹤管理版本庫的,千萬不要手動修改這個目錄裏面的文件,否則就把git倉庫給破壞了
4.關於文件變動跟蹤
首先這裏再明確一下,所有的版本控制系統,其實只能跟蹤文本文件的改動,比如 TXT 文件,網頁,所有的程序代碼等等, Git 也不例外。版本控制系統可以告訴你每次的改動,比如在第5行加了一個單詞 "Linux" ,在第8行刪了一個單詞"Windows"。而圖片、視頻這些二進制文件,雖然也能由版本控制系統管理,但沒法跟蹤文件的變化,只能把二進制文件每次改動串起來,也就是隻知道圖片從100KB改成了120KB,但到底改了什麼,版本控制系統不知道,也沒法知道。
5.關於編碼
因爲文本是有編碼的,如果沒有歷史遺留問題,強烈建議使用標準的UTF-8
編碼,所有語言使用同一種編碼,既沒有衝突,又被所有平臺所支持。
二、代碼提交
1.查看repo狀態
$ git status
2.添加文件到緩存區
$ git add file1.txt
$ git add file2.txt
3.提交到版本庫
$ git commit -m "message" # 一定要寫提交信息, 便於後續查看版本信息
三、管理修改
1.丟棄工作區的修改
$ git checkout -- file.txt
2.丟棄暫存區的修改
$ git reset HEAD file.txt # 丟棄暫存區的修改, 完畢後工作區內容未撤銷
3.撤銷提交(版本回退)
$ git reset --hard HEAD^
4.管理修改的舉例
- 場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。
- 場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
- 場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。
5.查看工作區與版本庫的差異
$ git diff HEAD -- file.txt
6.查看提交版本日誌
$ git log --pretty=oneline # --pretty選項更清晰顯示
四、遠程庫操作
1.克隆遠程庫
$ git clone http://gitlab.staff.sina.com.cn/liwei42/gitver
2.添加遠程庫(給本地庫)
$ git remote add origin [email protected]:liwei42/gitver.git
3.推送遠程庫
$ git push -u origin master # 第一次推送加'-u'選項, 關聯本地與origin的master分支
4.拉取遠程庫
$ git pull <遠程主機名> <遠程分支名>:<本地分支名>
在默認模式下,取回遠程主機某個分支的更新,再與本地的指定分支合併。git pull是git fetch後跟git merge的縮寫。
比如,要取回origin主機的next分支,與本地的master分支合併,需要寫成下面這樣:
$ git pull origin next:master # 如果要與當前分支合併, 則冒號後面的部分可以省略
相當於:
$ git fetch origin
$ git merge origin/next
手動建立追蹤關係:
$ git branch --set-upstream master origin/next
上面命令指定master分支追蹤origin/next分支。如果當前分支與遠程分支存在追蹤關係,git pull就可以省略遠程分支名
$ git pull origin # 如果當前分支只有一個追蹤分支,連遠程主機名都可以省略
五、分支管理
1.創建分支
$ git branch b1
2.切換分支
$ git checkout b1 # 切換到b1分支
$ git checkout -b b2 # 創建並切換到b2分支
3.合併分支
$ git merge dev # 合併dev分支到當前分支
$ git merge dev master # 合併dev分支到master分支(可能當前分支並沒有在master上)
$ git --no-ff merge dev # 合併時不使用ff方式, 這樣會在合併分支上保留提交的版本信息
六、分支策略
1.主分支master
代碼庫應該有一個、且僅有一個主分支。所有提供給用戶使用的正式版本,都在這個主分支上發佈。
2.開發分支develop
主分支只用來分佈重大版本,日常開發應該在另一條分支上完成。這個分支可以用來生成代碼的最新隔夜版本(nightly)。如果想正式對外發布,就在Master分支上,對Develop分支進行"合併"
3.臨時性分支
- 功能(feature)分支
- 預發佈(release)分支
- 修補bug(fixbug)分支
4.功能分支
它是爲了開發某種特定功能,從Develop分支上面分出來的。開發完成後,要再併入Develop。
5.預發佈分支
它是指發佈正式版本之前(即合併到Master分支之前),我們可能需要有一個預發佈的版本進行測試。預發佈分支是從Develop分支上面分出來的,預發佈結束以後,必須合併進Develop和Master分支。它的命名,可以採用release-*的形式。
6.修補bug分支
軟件正式發佈以後,難免會出現bug。這時就需要創建一個分支,進行bug修補。修補bug分支是從Master分支上面分出來的。修補結束以後,再合併進Master和Develop分支。它的命名,可以採用fixbug-*的形式