天天看點

記錄git常用操作指令

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-*的形式

繼續閱讀