2011-09-19 33 views
1

我已經開始使用git(在github上)並且有一個新手工作流問題。如果描述囉嗦的話,事先道歉,但我想描述我在思考,因爲我正在經歷這個過程,所以你可以糾正我。我也使用Eclipse EGIT插件,我認識到它永遠不會像使用命令行一樣好,但只是忍耐着我。git eclipse解決衝突導致重新發布未修改的更改以及

我們的項目建立後,我的合作伙伴擁有一個主回購協議,我是一個私人合作者。每當我推,我直接推回他的回購。一般來說,只要沒有衝突,我們可以承諾,拉動和推動。每當有衝突時就會發生問題。這裏有一個例子:

  1. 我的合夥人和我開始把我的最新代碼拉到我們的 各自的工作回購。沒有問題。
  2. 我修改FileA和FileB,添加,提交和推送它們兩者。沒有問題。
  3. 同時,我的合作伙伴修改FileA,然後嘗試拉取我的更新。
  4. 的Eclipse 給了他一個錯誤:用FILEA CheckOut的衝突
  5. 我們涉足的git bash的土地和在執行混帳拉得到更多有用的信息:

    錯誤:您的局部變化...書面合併:FileA。請在進行合併之前提交您的更改或存儲它們。

  6. 好,夠公平的。他承諾改變(FileA),並試圖再次拉動(通過Eclipse)。

  7. 他得到一條指示FileA衝突的消息。好,這是預料之中的。他現在繼續解決FileA上的衝突,並在FileA上添加一個git以指示它已解決。

  8. 他現在已準備好提交併推送。他預計將推進對FileA的合併更改。但現在,以下是我沒有得到的部分。儘管他根本沒有修改FileB,但Eclipse確定它是默認提交的一部分,所以他需要手動取消選中它以避免重新發送FileB,從而避免推送FileB(因爲沒有對其進行更改)。但即使這樣做也會導致FileB被推向上游。結果,他不僅最終推出了FileA,而且還推出了FileB。

我想知道我們是否以正確的方式做事,因爲我們可能不是,建議表示讚賞。

+0

理解git的一個關鍵點是,你永遠不會推送文件,你只推送提交,每個提交都完全指定每個文件的狀態。 [julkiewicz的回答](http://stackoverflow.com/questions/7476796/git-eclipse-resolving-conflicts-results-in-recommitting-non-modified-changes-as-w/7477037#7477037)建議一種方式,你的同事可能包含的內容與您期望提交的內容不同。 –

回答

0

也許在第6點你的colegue做了一個包含全部的改變,直到試圖拉取?如果他使用諸如commit -a之類的東西,那可能會發生。它也可能是Eclipse的默認行爲,只需將所有文件的所有更改添加到提交。然後,這些變化可能包括這兩個文件A和B.

確保只有改變FILEA上犯下,這樣的事情應該用:

git add FileA 
git commit   # Notice, no '-a' option 

不知道Eclipse允許對這種細粒度的控制哪些改變是和哪些沒有提交。