git 筆記記錄(八) git 庫管理與git協議

使用git show-ref命令查看所包含的引用

bluceshang@bluceshang:~/gittemp$ git show-ref
38074841cf56acdfef2f638ea686f1fd49f17d51 refs/heads/branch_1.0
a974d7c2df090893f474f7784637b1f84eeeac15 refs/heads/master
a974d7c2df090893f474f7784637b1f84eeeac15 refs/remotes/origin/master
e7564d5348cd1b482fcefa01b1d0716adad29458 refs/tags/hello_1.0
f65ebb922cabc0def4b3d5c8432472f40ac3b3aa refs/tags/old_practice
注:以refs/remotes/開頭的是遠程版本分支在本地的映射refs/heads/開頭的是分支refs/tags/形頭的是里程碑.

"快進式推送",就是要推送的版本庫的提交是建立在遠程版本庫相應檓的現有提交基礎上的,即遠程版本庫相應分支的最新提交是本地版本庫最新提交的祖先提交.

強制推送,參數-f. git push -f

git pull 命令包含了兩個動作:獲取遠程版本庫的最新提交,以及將獲取到的遠程版本庫提交與本地提交進行合併.

非快進式推送濫用會造成項目的空難,所以要禁用非快進式推送,在receice.denyNonFastForwards設置爲true.

git config receive.denyNonFastForwards true

git pull = git fetch + git merge;

合併操作:在大多數情況下,合併操作只須提供一個<commit>作爲參數,合併操作將<commit>對應的目錄樹和當前工作分支的目錄樹內容進行合併,合併後的提交以當前分支的提交作爲第一個父提交,以<commit>爲第二個父提交.合併操作還支持將多個<commit>代表的分支和當前的分支進行合併,過程類似.

默認情況下,合併後會自動提交,如果提供--no-commit選項,合併後的結果會放入暫存區,用戶可以對合並的結果進行檢查,更改,然後手動提交.

git自動合併:1.修改了不同的文件中內容,2.修改了同和個文件中不同地方的內容,3.一個用戶重命名了文件,而另一個用戶修改了文件中內容,在三種情況git默認合併都會解決.

git合併過得是通過.git目錄下

  1. 文件.git/MERGE_HEAD記錄所合併的提交ID
  2. 文件.git/MERGE_MSG記錄合併失敗的信息
  3. 文件.git/MERGE_MODE標識合併狀態.
版本庫暫存區中會記錄衝突文件的多個不同版本,可以使用git ls-files命令查看.
bluceshang@bluceshang:~/gittemp$ git ls-files -s
100644 10236e 1	README
100644 10236e 2	README
100644 10236e 3	README
每一行分爲四個字段,前2個分別是文件的屬性和SHA1,第三個字段是暫存區編號,當合並衝突發生後,全用到0以上的暫存區編號.
  1. 編號爲1的暫存區用於保存衝突文件修改之前的副本,即衝突雙方共同的祖先版本,可以用1<filename>訪問  git show :1:README
  2. 編號爲2的暫存區用於保存當前衝突文件在當前分支中修改的副本,可以用:2:<filename>訪問  git show :2:README
  3. 編號爲3的暫存區用於保存當前衝突文件在合併版本(分支)中修改的副本,可以用:3:<filename>訪問 git show :3:README
工作區的版本則可同時包含了成功合併及衝突的合併,其中衝突的合併用特殊的標記(<<<<<<<=======>>>>>>>)進行標識.
$cat README
User1 hacked
<<<<<<< HEAD
Hello,user2.
=======
Hello,user1.
>>>>>>> a12133212332123443212343221dewsw
User2 hacked.
User2 hacked again.
特殊標識<<<<<<<(七個小於號)和=======(七個等號)之間的內容是當前分支所更改的內容.特殊標識=======(七個等號)和>>>>>>>(七個大於號)之間的內容是所合併的版本更改的內容.
衝突解決的實質是通過編輯操作,將衝突標識符所標識的衝突內容替換爲合適的內容,並去掉衝突標識符,編輯完畢後執行git add命令將文件添加到暫存區(標號0),然後再提交就完成了衝突解決.

衝突有2種方法解決:1.手動解決.2用圖形解決git mergetool





發佈了31 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章