2009-12-03 37 views
3

我在一個分支工作,並得到了一份工作副本,真的不乾淨。查看提交的更改時,我想要將一些初始修復程序提交到master分支。使用Git,我如何在工作副本中將一些更改提交到不同的分支?

在這種情況下,使用git stash並沒有什麼幫助,因爲我的工作副本有許多其他更改,它們將不會與主人合併。

有沒有更有效的方法來解決這種情況? (例如做一個提交,並移動它的父級?)

回答

1

建議,這是解決方案,我想出來的:

方案1櫻桃採摘

只需提交在分支本身的單一變化:

git add --patch <files>  # record every change to move to master 
git commit 

移動掌握,櫻桃採摘

git stash 
git checkout master 
git cherry-pick <commitid> 

早在分支,它可以重建基礎。

git checkout <branch> 
git rebase master 

對於每一個重複提交,系統會提示您輸入:

git rebase --skip 

重複的提交都會被過濾掉的補丁集的分支,歷史上是乾淨的。最後的git merge仍然可以快速前進。

溶液2,而不必在分支第一

首先提取一切移動到主提交:

git add --patch <files>  # record every change to move to master 

然後切換到主提交:

git stash --keep-index  # clear the working copy only 
git checkout master -m  # merge the index. 
git commit 

並回到分支,它可以直接重新發布到主控端:

git checkout <branchname> 
git rebase master   # move to branch start to the tip of master. 
git stash apply    # restore working copy, auto merges the changes 

解決方案3,使當前的主分支

在你不介意有多個工作副本(我總是SVN實際上這樣做)的情況下的一個副本,還有第三種解決方案:

mkdir ../newrepos 
cd ../newrepos 
git init 
git remote add origin /path/to/your/repository 
git fetch master:remotes/origin/master # fetch remote master to local remotes/origin/master 
git checkout -t origin/master   # make new "master" branch, link to remote, checkout. 

git commit 
git push origin master     # inject the change in the original repository. 

克隆設置在這裏手動完成,因爲git clone總是克隆當前活動的分支。


對於更復雜的情況下,總有一個額外的安全防範與git diff > to-master.patchgit apply to-master.patch。這使您可以更自由地重置所有內容,並嘗試結束,直到您將事情做好。

在這種情況下,我們正在處理兩個分支中存在的文件中的單行修復。這不會給任何合併衝突,並允許一些快捷方式,如checkout -m

1

我不知道這是你想要的,但我只是檢查出其他分支(它不會丟失未提交的更改),然後有選擇地簽入你想要提交的更改。

3

使用git add -i來選擇你想要提交到這個分支的東西,然後改變主人並提交剩下的東西。

使用add -i您可以選擇要準備提交哪些文件的哪些部分,然後提交它們,同時將相同文件的其他部分保留在提交之外。

+1

根據我的經驗,'add -p'是大多數人在使用'add -i'時想要的東西 – Dustin 2009-12-03 17:53:00

+0

我經常使用'git add --patch'來處理這些情況,不幸的是我還想保留一些更改在工作副本中,所以我不能切換分支。 – vdboor 2009-12-04 08:54:16

6

您可以使用git add -i來使用交互模式。您可以指定,要提交的內容以及要跳過的內容。

這樣你可以提交你的oneliners作爲單獨的提交。通過使用git cherry-pick,您可以稍後將它們合併到您的主設備上。

+0

一直在測試git cherry-pick,這個作品非常整潔!在rebase中,重複項會被git rebase --skip濾掉。謝謝你的提示! – vdboor 2009-12-04 09:55:32

2

git add -p將使您直接進入修補模式,以遵循@ arkaitz-jimenez正確推薦的流程。

0

而不是使用git add -i/git add -p你也可以使用的git gui
交互式增加模式的基礎上以前的(或許還有其他git的圖形界面,這是CLUDE提交工具,例如像QGit,有此功能)

相關問題