2012-04-13 99 views
0

場景: 我們下面的git的工作流程:爲什麼重新合併分支會忽略一些更改?

分支 - 具有獨立功能分支

釋放碼待QAD分支 - 從個體特徵的分支代碼,但通過QA

  1. 被測試我創建了一個分支特徵-A
  2. 致力於製造一些更改(提交1
  3. 製造幾個更多的變化和提交(提交2
  4. 合併分支特徵-A待QAD分支
  5. 意識到待辦事項功能未能正常工作QAd分行
  6. 切換至功能-A分支進行了復位 - 硬先前提交(提交1)作爲最後一個提交作出了代碼更糟
  7. 做出改變,並承諾(提交3
  8. 合併功能-A支進QAd
  9. 具有正確代碼的文件(屬於commit-1)被錯誤地合併。合併保留提交2的文件。 (該文件未在上次提交中修改)

不確定這裏做錯了什麼!根據我對git的有限瞭解,這似乎是非常微不足道的事情。

如果我正在做一些根本性的錯誤,那麼在這種情況下,您已經合併過一次的正確方法是什麼,需要返回功能分支中的先前版本並再次合併。

回答

1

git reset --hard只是重置HEAD指針。你可能想要做git revert <commit-id>。這有效地解除了提交併將其記錄在歷史記錄中,以便將撤消操作合併到您的QA分支中。

這是git help revert

由於一個或多個現有的提交,恢復變更,相關的補丁引入,並記錄了一些新提交該記錄下來。這 要求您的工作樹是乾淨的(沒有修改HEAD提交)。

注意:git revert用於記錄一些新的提交以反轉一些早期提交(通常只是錯誤提交)的效果。如果你想把 丟掉工作目錄中的所有未提交的更改,你應該看到git-reset(1),特別是--hard選項。 ...

相關:What's the difference between Git Revert, Checkout and Reset?How to revert Git repository to a previous commit?

0

以待QAD分支仍具有commit2和其他一些不正確的文件的變化,因爲你沒有撤消從第一次合併,當你帶過來功能-A

之前使修復後合併了功能-A第二次,我會運行git的復位 - 硬上以待QAD分支哪裏的第一個合併之前提交的ID

編輯!

這可能會導致問題,如果其他開發人員在初始合併後提交了QAd功能。如果這樣做,請注意您將會退出哪些提交。

+1

如果其他人已經提交給即將QAd分支會怎麼樣? – krlmlr 2012-04-13 01:39:09

+0

我同意,我忽略了這個事實。 Upvoted您的文章,我認爲這是更合適的解決方案,特別是與其他開發人員合作時。 – Keith 2012-04-13 01:43:38

0

當您在feature-A分支上執行'git reset'時,您又回到了commit-1,然後添加了commit-3。但是在QAd分支上,您仍然有commit-1和commit-2。然後,當您將功能A合併到即將QAd時,您可能會看到如下內容:commit-1,comment-2和commit-3-merged。因此,可能來自commit-2的東西依然存在。您可以通過以下幾種方式解決問題:

  1. 對feature-A和待定QAd執行'git reset',將feature-3添加到feature-A,合併到to-be- QAd
  2. 在feature-A上執行'git revert'以添加一個提交un-commit commit-2,添加commit-3 - 在此功能之後 - 分支將如下所示:commit-1,commit-2, commit-2-undo,commit-3。然後,合併到即將到達的QAd,它將獲得提交2撤消和提交3
相關問題