Eclipse里commit代碼,其實只是提交到本地倉庫,需要push才會提交到遠程的git倉庫,這時是一個本地倉庫到遠程倉庫的同步過程。Git是分布式的,每個人在本地倉庫維護本地的自己的那一份代碼,commit時只提交到本地倉庫,不會影響到別人。當你push到遠程倉庫就可能發生沖突了。假如別人在你push前也push了同一個文件,那么問題就來了,沖突了,rejected – non-fast-forward出現了。
解決方法一:每次本地修改代碼前先從git倉庫pull下想要提交的分支的最新代碼,改完了commit並push到git倉庫。這里有個前提,修改、commit和push期間沒人動你修改的文件。
解決方法二:期間文件在git倉庫被改了,那么重新從git倉庫獲取最新的分支代碼,然后把自己的修改放上去提交。
解決方法三:通過merge來解決沖突。當出現rejected – non-fast-forward別慌,這時我們可以識別哪些文件有沖突,一個一個改,改好了再pull下最新代碼,然后提交到遠程倉庫。
下面具體說明下提交操作:
1、單個文件提交:首先跟遠程倉庫做比較,右鍵修改的文件和目錄->Team->Synchronized Workspace->確保沒有沖突后再次右鍵修改的文件和目錄->commit,在Git Staging里選中Unstaged Changes窗口里要提交的文件->Add to Index->在Commit Messge里寫提交說明->Commit and Push->Next,注意這里不要選最下面的Force overwirte branch in remote if exists and have deverged,否則本地倉庫會覆蓋遠程倉庫,造成覆蓋別人代碼的嚴重后果->OK
2、沖突解決:上面在Synchronized Workspace后出現沖突會有鮮艷的紅色箭頭出現,雙擊就可以看到哪個地方沖突了,一般是先把本地的改動保存好,從遠程取下最新內容,再加上本地修改,最后提交。圖示如下:
上面本地文件改動了,遠程文件新增了,所以沖突了,右鍵選中該文件,點擊Merge:
可以看到新怎的那一條自動復制到本地來了,接着右鍵點擊Commit,輸入提交說明,提交到本地倉庫。此時再Pull最新遠程git倉庫里的代碼到本地倉庫(沖突不解決Pull會報錯,Push報rejected – non-fast-forward),然后Push即可:
注意不要點強推,很容易覆蓋代碼。