2014-09-25 106 views
1

我創建了一個分支來解決問題。在這個分支中,我放置了很多調試行來識別問題,並對其進行了修復。所以,我有:如何強制手動合併git而不是快進

* (issue_b47) Without the bug but with a lot of useless debug things 
* (HEAD, master) With the bug 

如果我只是寫

git checkout master 
git merge issu_b47 

git會做一個快進合併,然後我將繼承所有調試事情,我不想。

我想要做的是做一個手動合併我的difftool。怎麼做?

我認爲在我的difftool的左側面板上清楚地看到issue_b47分支和右側面板上的master分支更容易。我可以決定保留解決問題的相關內容,保存差異並最終確定合併。有沒有這樣做與GIT?

回答

1

通過使用這個命令你能避免快進

git merge --no-ff branchname 
1

它聽起來像你想在分支上的提交被修改了一下。有很多方法可以做到這一點。這裏有幾個常見的:

  1. 修補好內容(擺脫調試的東西),然後在你的分支git add -A; git commit --amend,然後合併爲正常。

  2. git reset --soft HEAD~1而在分支上,然後git reset HEAD .將拉回所有東西,讓你再次開始提交。你將有未分離的變化。

+0

第一個解決方案是我通常做的,但是做一個更好與兩個分支的有罪文件進行比較。我會清楚地看到我做了什麼改變。通過這種方法,我可以保持解決問題的相關問題。 – nowox 2014-09-25 06:47:36

+0

我不認爲有這樣做與git。你可以用'git reset --soft HEAD〜1; git reset HEAD。; git add -p',最後一位將導致git獲取更改的每個塊並詢問您是否要將其添加到提交中。 – 2014-09-25 06:51:53

+0

@coin這是一個很好的例子,爲什麼有人應該接受這個原則[Commit Through,After Later,Publish Once](http://sethrobertson.github.io/GitBestPractices/)。這對你現在沒有幫助,但你應該考慮將來的工作流程。 – 2014-09-25 09:15:30

0

從iss_b47分支

git difftool HEAD~1 -- <file> 

假設你有一個合適的difftool配置你會被側窗格得到一個側面,你可以移動的變化來回,然後保存結果。那時你可以git commit --amend然後git合併。

在關閉更改中,您碰巧只對您的調試更改執行了git commit,然後在錯誤修復中執行了git commit --amend,然後您可以使用reflog自動提取更改。

0

使用--no提交給力沒有提交,並--squash創建它自己的承諾,而不是同一個commit爲(issue_b47)

git merge --no-commit --squash issu_b47 

這個命令後,git會自動合併,並將修改後的文件放在INDEX中。您可以通過git status找到修改後的文件。

在這個階段,您可以使用任何工具來進行手動合併。之後,git添加+ git提交完成合並。您將從issue_b47中單獨提交,因爲它曾經是快進(這是正常的,因爲它們在兩次提交中都有不同的更改)

相關問題