2012-04-27 53 views
2

現狀:的Git:如何提交反後局部修改合併

開發人員1:

兩個開發商都在相同的遠程分支題爲SPRINT1工作的變化,比方說2個文件的一些代碼,提交(意外添加3個其他文件),並推送到Sprint1。

開發人員2:實現莫名其妙開發1還意外增加3個文件,我們不想推。因此,他將更改反向合併到開發人員1更改之前的提交。

此時開發者1想要嘗試再次提交他的兩個文件(而不是額外的3他仍在研究),並推到遠程分支(SPRINT1)。問題是拉將覆蓋開發人員1本地文件,並有效地「刪除」他所有5個文件中的本地更改。

什麼是開發人員1的正確方法得到的最新的頭,但要能推動正確的文件,這又不失變化?

+0

你是什麼意思的「反向合併」?重置還是恢復? – 2012-04-27 16:23:55

+0

Git從不「刪除」數據,Dev1將不得不將他所需的更改合併到Sprint1的新HEAD中,最糟糕的情況是他會留下一些衝突。 – KurzedMetal 2012-04-27 16:26:42

+0

我只是想添加一些有用的建議來避免這些類型的問題。我強烈建議讓每個開發人員在他們自己的臨時開發分支上工作,然後在完成一些工作後再合併回主開發分支。 – Valjas 2012-04-27 16:36:20

回答

1

有關git的好處是很難完全刪除您曾經提交過的文章。如果你不想爲了消除這兩個提交(原之一,並且恢復它的)執行力推到倉庫並提交更改從無到有有哪些開發人員1可以這樣做:

  1. git pull - 好了,我們拉復歸提交和具有歷史這樣的:

    ca798ca revert 'commit1' 
    cf76cf7 commit1 
    

    好了,我們「丟失」我們的變化,但不要擔心 - 下一步將其帶回。

  2. git revert -n HEAD(或顯式git revert -n ca798ca)恢復恢復提交。現在,來自原始提交的所有更改(包括必要的和不必要的更改)都在索引中,但尚未提交(感謝-n選項)。

  3. git reset HEAD將所有更改從索引移回工作目錄。

  4. git add necessary_file && git commit -m 'necessary changes'只進行必要的更改添加到索引並提交它們。在這個提交中你不想要的所有更改都會保留在你的工作目錄中。

  5. git push與同事分享您的結果。

這些步驟是按原樣提供的,所以如果您不明白上述內容,請在做之前詢問。否則,事情可能變得更加混亂。

+0

這在第2步的顯式修訂中工作得非常好。然後我想通過GUI(SmartGit)找出它,但無法弄清楚如何做同樣的事情?感謝解決方案@ KL-7! – Shawn 2012-05-08 20:37:50

1

有無開發人員1創建與他目前本地修改另一個分支,然後讓他的本地文件的SPRINT1分支拉請求他SPRINT1分支(不是他創建的新分支)。然後,他可以在他不想在新分支中提交的三個文件上運行git rm,然後將該分支合併回Sprint1。