關於git解決合併衝突

我們在工作中經常會遇到代碼合併衝突的問題,其實解決起來很容易
https://www.jianshu.com/p/6960811ac89c

首先是add添加到緩存區 並提交
這裏簡單介紹一下 git add 和git commit的意義
git add到底是什麼意思?用官方的話就是:跟蹤新文件,或者說將內容從工作目錄添加到暫存區。
用生活當中的一個案例來解釋就是:
git add 就好比如您去超市購物,用購物車裝了一大車的商品(類似於修改過的文件),然後去收銀臺結賬,由於您一次性挑選的商品比較多,你有可能要猶豫一下到底要不要全部買下來;這時候,你可以一件件的將商品拿到收銀員那裏去掃碼計價結算(類似與 git add fileA, git add fileB…,即添加指定某些文件),也可以財大氣粗的全部買下(類似於git add ./,即添加所有文件),接下來就是買單並拿回家(git commit 和 git push)。

git commit主要是將暫存區裏的改動給提交到本地的版本庫。

每次使用git commit 命令我們都會在本地版本庫生成一個40位的哈希值,這個哈希值也叫commit-id,commit-id在版本回退的時候是非常有用的,它相當於一個快照,可以在未來的任何時候通過與git reset的組合命令回到這裏。

git commit -a -m "提交的描述信息"

git commit 命令的-a 選項可只將所有被修改或者已刪除的且已經被git管理的文檔提交倒倉庫中。如果只是修改或者刪除了已被Git 管理的文檔,是沒必要使用git add 命令的。

git add .命令除了能夠判斷出當前目錄(包括其子目錄)所有被修改或者已刪除的文檔,還能判斷用戶所添加的新文檔,並將其信息追加到索引中。

git commit --amend 對於已經修改提交過的註釋,如果需要修改,可以藉助 git commit --amend 來進行


然後使用git pull --rebase來拉取遠程倉庫的代碼 查看剛纔的commit文件是否與遠程倉庫有conflict!
之後發現Resolve all conflicts manually ,mark them as resolved with 意思是 :手動解決所有衝突,將它們標記爲已解決。

這裏介紹一下 git pull --rebase的意義

1.git pull
git pull = git fetch + git merge FETCH_HEAD

git pull --rebase = git fetch + git rebase FETCH_HEAD
2.merge 和 rebase
現在我們有這樣的兩個分支,test和master,提交如下:

   D---E test
  /

A---B---C---F--- master
在master執行git merge test,然後會得到如下結果:

   D--------E
  /          \

A---B---C---F----G--- test, master
在master執行git rebase test,然後得到如下結果:

A---B---D---E---C‘---F‘--- test, master
merge操作會生成一個新的節點,之前的提交分開顯示。
而rebase操作不會生成新的節點,是將兩個分支融合成一個線性的提交。

3.rebase好處
想要更好的提交樹,使用rebase操作會更好一點。
這樣可以線性的看到每一次提交,並且沒有增加提交節點。

merge 操作遇到衝突的時候,當前merge不能繼續進行下去。手動修改衝突內容後,add 修改,commit 就可以了。

而rebase 操作的話,會中斷rebase,同時會提示去解決衝突。
解決衝突後,將修改add後執行git rebase –continue繼續操作,或者git rebase –skip忽略衝突。

Auto-merging gradle.properties
CONFLICT (content): Merge conflict in gradle.properties
Auto-merging app/src/main/java/com/tencent/wcenter/MainActivity.java
Auto-merging .idea/misc.xml
CONFLICT (content): Merge conflict in .idea/misc.xml

這裏的意思是自動合併 gradle.properties 和.idea/misc.xml 文件 但是自動合併衝突了
於是我們需要手動到工程中分別找到這兩個文件,並對沖突的地方進行處理。


處理完兩個文件衝突後 我們查看狀態 顯示的是both modified 兩個修改 這個時候我們git rebase --continue
就會提示你 You must edit all merge conflicts and then mark them as resolved using git add 意思你必須編輯所有的合併衝突,然後使用git add將它們標記爲已解決 很明顯讓你使用add重新提交到緩存區
這裏需要介紹一下git rebase --continue 的意義 :https://www.jianshu.com/p/6960811ac89c
https://blog.csdn.net/cch___/article/details/100131128 這兩個地址可以去閱讀一下 大概的作用是:執行完$git pull --rebase 之後,本地如果產生衝突,手動解決衝突之後,用"git add"命令去更新這些內容的索引(index),然後只要執行:

$ git rebase --continue 就可以線性的連接本地分支與遠程分支,無誤之後就回退出,回到主分支上。
注意:一般情況下,修改後檢查沒問題,使用rebase continue來合併衝突。


這個時候我們add添加修改衝突後的文件 在查看狀態 由both modified變成了modified 這個時候我們
git rebase --continue 發現 Successfully rebased and updated branch 意思就是成功的創建了線性鏈接並且更新完成。 這時候我們在status 查看 Your branch is ahead of branch by 1 commit 本地分支比之前多了一個提交。


此時 我們就直接push到遠程倉庫的對應分支上就ok了 完美解決了合併衝突的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章