>[success] # 簡單的沖突
1. 當你在編寫代碼時候已將將代碼 `commit` 到本地倉庫
2. 你的同事手快先提交了一次代碼到了遠程
3. 此時你本地倉庫和遠程倉庫就會差一個歷史版本
4. 當你提交自己本地倉庫到遠程,就會產生一次常見的沖突(不修改同一個文件相同位置)
* **遠端倉庫上含有本地倉庫沒有的內容,所以這次 push 被拒絕了**

* **解決**:**先用 pull 把遠端倉庫上的新內容取回到本地和本地合并(此時本地和遠程版本一致),然后再把合并后的本地倉庫向遠端倉庫推送**,這次`pull`就完成了:遠端倉庫被取到了本地,**并和本地倉庫進行了合并**。在這個時候,就可以再`push`一次了。由于現在本地倉庫已經包含了所有遠端倉庫的 commits,所以這次`push`不會再失敗
* **原理**: 這次`pull`操作發現不僅遠端倉庫包含本地沒有的`commit`,本地倉庫也包含遠端沒有的`commit`,就會把遠端和本地的獨有`commit`進行合并,自動生成一個新的`commit`,`push`提交時候也會帶上這次合并的提交到遠程
* **總結**:一個項目通常會有多個人進行協作開發,那么存在多人不確定時間的push,那么在你push以前,就先pull一下代碼,確認本地倉庫已經同步了中央倉庫的更新內容后,然后在push提交就可以了
>[success] # 合并沖突(分支合并 和 他人代碼合并)
`merge`在做合并的時候,是有一定的自動合并能力的:如果一個分支改了 A 文件,另一個分支改了 B 文件,那么合并后就是既改 A 也改 B,這個動作會自動完成;如果兩個分支都改了同一個文件,但一個改的是第 1 行,另一個改的是第 2 行,那么合并后就是第 1 行和第 2 行都改,也是自動完成


* **如果修同一文件同一行產生沖突**,下圖 `a.js` 發生了合并沖突,要求 "fix conflicts and then commit the result"(把沖突解決掉后提交)

沖突文件會被git 記錄**用符號標記出了它們的邊界以及它們的出處**,現在要做的就是選擇你要合并的內容

橫向對比沖突 會對具體行顯示會更清楚點

這次只想保存自己忽略合并過來的代碼經過修改后,只需要將這個文件手動提交即可,`git add .` 在` git commit -m '解決沖突'`

*****
**沖突我就是不會解決** 可以放棄本次合并 `git merge --abort`,Git 倉庫就會回到`merge`前的狀態