假設沖突文件是 index.html
下面分5種情況討論。
1、本地不變。
然后遠程別人有更新。
git pull
這種最簡單,沒有沖突,本地工作區直接更新
2、我本地修改,但是不add。
然后遠程別人有更新,此時 :
git pull,
git會告訴你:
error: Your local changes to the following files would be overwritten by merge:
index.html
此時,我git checkout -- index.html千萬注意,上條命令會導致你自己的修改丟失了!!
然后git pull.成功。
這種情況下,你自己的修改完全丟失。本地接受了遠程的修改。
3、我本地修改,但是已經add了。
然后別人遠程更新,
git pull
這種情況,和上面幾乎一樣。
git reset HEAD test/TestCase.php
上面這條命令可以理解為add命令的逆命令。即,取消add操作。
然后繼續
git checkout -- index.html
千萬注意,上條命令會導致你自己的修改丟失了!!
然后git pull.成功。
這種情況下,你自己的修改完全丟失。 本地接受了遠程的修改。
4、我本地修改,add 且 commit了
然后別人遠程更新,
git pull
注意:這種情況和第2,第3種情況不同。git會認為你的commit也很重要。同等重要。
突然發現,自動進入vi界面。
Merge branch 'master' of https://github.com/xxxx
這什么意思呢?就是git會主動再幫你添加一個commit。
先讓你寫點注釋,並且它已經幫你寫了幾句話
那自己寫點東西,然后保存退出vi
請注意,這個commit是在本地的,還沒有發到遠程。
這個commit會自動合並 你添加到代碼,和 別人遠程更新的代碼,
所以,之后請自己檢查一下這個代碼有無問題。
如果都沒有問題,則你現在
git push
這個命令可以把你的本地改動推送到遠程。
push之后,遠程得到你和他人的所有更新。push之前,僅本地得到你和他人的所有更新。
5、使用分支功能。
git的分支功能很強大,應該多使用。 上面幾種情況都沒有使用分支。使用分支會更好。 首先,我本地新建並切換分支branch_1,自己起有意義名字,並修改文件。
git checkout -b branch_1 vi index.html git add index.html git commit -m "change test"
現在,別人已經更新了遠程主分支代碼(沒更新就極其方便了,也不必說了,快速更新)我想把分支合並到主分支。 我應該,先回到主分支,並更新。
git checkout master
git pull
然后,在本地,把我的修改分支合並上去。git merge branch_1 自動進入vi界面,讓你寫注釋。 然后會合並好。 類似提示:
index.html | 3 ++-
上面,兩個加號表示文件增加了兩行,一個減號表示文件減少了一行。
此時,注意,凡是進入vi界面后, 最好自己再檢查一下程序,檢查那些被提示修改過的文件,(這是一個好習慣,但我從來不遵守) 如果認為正確,最后, git push,推送到遠程。
push之后,遠程得到你和他人的所有更新。push之前,僅本地得到你和他人的所有更新。
作者:小丶侯
鏈接:https://www.jianshu.com/p/daba0bb673a0
git fetch --all git reset --hard origin/master git pull //可省略
git fetch 指令是下載遠程倉庫最新內容,不做合並
git reset 指令把HEAD指向master最新版本
git rest --hard HEAD^:回退到上一版;
git rest --hard HEAD^^:回退到倒數第二版;
git rest --hard 123321:回退到commit id為123321的版本;
