Git學習筆記 002 Git分支 part2

分支的管理

查詢分支的信息,注意結果中帶星號的是當前分支,也就是說HEAD指向的分支

$ git branch

* master

testing

查看每個分支的最後一次提交

$ git branch -v

* master 4416a2c [ahead 6] fix conflict

testing 7957b99 changed by testing branch

查看已經合併的分支

$ git branch --merged

* master

testing

查看未合併的分支,因為所有分支都合併過了, 所以這個查詢結果是空的

$ git branch --no-merged

如果想刪除沒有合併的分支, 使用branch -d會出現錯誤。強制刪除可以使用branch -D命令

遠程分支

在克隆了一個遠程倉庫或者從遠程倉庫拉取最新版本後,git會在本地為用戶建立一個和遠程一樣的分支,並且也會在本地保存遠程分支的狀態。這樣,如果再本地分支修改後,想要回到剛剛克隆下來時的版本,git可以參照本地保存的遠程分支的狀態返回那時的版本。

遠程分支被他人改動後,如果想把最新的版本取到本地,可以使用fetch命令。

$ git fetch origin

之前介紹過,fetch命令是不會自動把遠程的文件合併到本地文件的。也就是說同名的本地文件和遠程文件內容不一致,它是不會把遠程文件合併到本地文件的。

推送

把本地更改好並且提交的文件推送到遠程倉庫中,可以使用push命令。push命令的一般形式是git push (remote) (branch),這裡的(remote)其實是在克隆遠程倉庫時,git默認為這個遠端倉庫取名為origin。如下面的示例。

$ git push origin master

Enumerating objects: 13, done.

Counting objects: 100% (13/13), done.

Delta compression using up to 4 threads

Compressing objects: 100% (8/8), done.

Writing objects: 100% (12/12), 1.05 KiB | 53.00 KiB/s, done.

Total 12 (delta 3), reused 0 (delta 0)

remote: Resolving deltas: 100% (3/3), done.

To https://github.com/Kutilion/GitTestProject.git

6e2fa09..4416a2c master -> master

如果示例的命令變為git push origin master:testing,則表明將本地master分支推送到遠程分支testing上。區別只是遠程和本地的分支名字不一樣。

跟蹤分支

上邊提到,拉去遠程分支後,會在本地保存遠程分支的狀態,其實是在本地創建了一個跟蹤分支,用於跟蹤遠程分支。本地的分支通過跟蹤分支來與遠程分支進行交互。使用如下命令可以讓本地分支跟蹤遠程分支

$ git checkout --track origin/serverfix

Branch serverfix set up to track remote branch serverfix from origin.

Switched to a new branch 'serverfix'

希望本地分支的名字和遠程分支不一樣,但是還希望本地分支跟蹤遠程分支可以用

$ git checkout -b sf origin/serverfix

Branch sf set up to track remote branch serverfix from origin.

Switched to a new branch 'sf'

可以看到,本地分支sf,跟蹤了遠程服務器origin上的serverfix分支。

查看所有分支的跟蹤信息可以用branch -vv

$ git branch -vv

* master 4416a2c [origin/master] fix conflict

testing 7957b99 changed by testing branch

可以看到,master跟蹤了origin/master分支。這裡有可能出現[origin/master: ahead 3, behind 1]這樣的結果, 說明本地分支有三個提交沒有推送到遠程分支, 遠端有一個提交沒有反應到本地。

拉取

當 git fetch 命令從服務器上抓取本地沒有的數據時,它並不會修改工作目錄中的內容。 它只會獲取數據然後讓你自己合併。

然而, git pull 命令在大多數情況下它的含義是一個 git fetch 緊接著一個git merge 命令。 git pull 都會查找當前分支所跟蹤的服務器與分支,從服務器上抓取數據然後嘗試合併入那個遠程分支。

pull有時候回產生一些讓人困惑的結果, 所以最好還是使用fetch和merge來明確指定拉去和合並。

刪除遠程分支

如下的命令會刪除遠程分支,但是個人更推薦直接到遠程分支服務器上去可視化刪除,更加安全可控。

git push origin --delete master


分享到:


相關文章: