2016-11-15 61 views
0

我經常注意到在第一次提交(和推送)之後更改了幾行的衝突問題。誰能告訴我爲什麼以及如何避免這種情況?修復單行時出現Git衝突

我承諾,推動一項新功能

git commit -am 'my new feature' 
git push origin development 

然後,我注意到一個小錯誤(單線)

git commit -am 'Bugfix' 

但是git的說,我要推前拉。

git pull origin development 

結果:我在第一次提交後更改的行中存在衝突。這經常發生。它應該沒有衝突的工作,因爲我的新更改應該在更舊的更改之前首選。

沒有,這不是因爲別人提交了相同的文件。功能分支由我維護。我們使用github。

另一件事是:解決衝突後,NetBeans強制我做一個空提交。它沒有發現任何文件改變,但它說我必須承諾完成。

行的第一個版本:

$duedate = $dateObject->format('%d.%m.%Y'); 

和固定版本

$duedate = $dateObject->format('d.m.Y'); 

也許有事情做與不正確完成了重訂?

編輯:我們觀察到這種行爲,如果兩次推動之間有短時間(最多一分鐘)。也許這是由於異步時鐘或github緩存推動?

+2

你一定是錯的。其他人改變了它。如果遠程分支和您的本地分支相同,您**不能**發生衝突。嘗試做:'git log -1 dev'和'git fetch && git log -1 origin/dev'。 sha-1是否一樣?如果他們不是,其他人改變了分支。 – Alderath

+1

你得到了什麼確切的衝突?它是否與行結尾有關? – Jubobs

+0

他們是一樣的!我已經添加了關於上述衝突的信息。 – Corni

回答

0

我們找到了答案。修改對已經推送到存儲庫的另一個提交的提交時會發生這種情況。只有在提交僅在本地存儲庫上時,才應該使用修改。我不知道爲什麼git客戶會在這裏發出警告,但在幾乎所有情況下都會造成麻煩。

0

這意味着其他人在推送後推送了同一分支。 GIT是一個協作工具,所以你應該經常期待這種用例。

+0

我問我的同事。他沒有犯下。此功能分支僅由我維護。 – Corni

+1

如果您運行git log或在服務器UI中查看分支歷史記錄(您正在使用哪個服務器?),很容易看到發生了什麼情況。 – yorammi

0

git push && git pull是冪等的,如果沒有人推動任何東西。

因此,git push && git -am 'my commit && git pull絕不應導致合併衝突。你擁有與遠程服務器相同的所有對象,所以git pull不應該引入任何新東西。

因此:有人正在添加新的提交或修改提交。

你聲稱你的同事不推動該分支。所以我懷疑某種自動化。 你使用服務器端鉤子嗎?

爲了獲得更多的信息,這樣做:

git commit -am "whatever" 
git log -1 
git push origin development 
<change something? 
git commit -am "more whatever" 
git pull 
git log -3 

,並告訴我們兩個日誌的輸出命令

+0

我們在服務器上使用掛鉤,而不是在github上。服務器配置爲推送部署並添加爲另一個存儲庫(不是'origin') – Corni

+0

現在很難顯示日誌,因爲現在有其他提交。有可能壞的時鐘同步是原因嗎?或者github緩存推動(由於負載)? – Corni

+0

這個問題是否可重複?或者曾經發生過?我從OP那裏得到的感覺是它經常發生。所以如果你可以使用上述技術重複它,日誌應該只顯示你的'測試'提交。 (除非你的同事都在左右敲擊 - 在這種情況下,要求他們停止按下10分鐘:P) – Pod