我在一個分支工作,並得到了一份工作副本,真的不乾淨。查看提交的更改時,我想要將一些初始修復程序提交到master
分支。使用Git,我如何在工作副本中將一些更改提交到不同的分支?
在這種情況下,使用git stash
並沒有什麼幫助,因爲我的工作副本有許多其他更改,它們將不會與主人合併。
有沒有更有效的方法來解決這種情況? (例如做一個提交,並移動它的父級?)
我在一個分支工作,並得到了一份工作副本,真的不乾淨。查看提交的更改時,我想要將一些初始修復程序提交到master
分支。使用Git,我如何在工作副本中將一些更改提交到不同的分支?
在這種情況下,使用git stash
並沒有什麼幫助,因爲我的工作副本有許多其他更改,它們將不會與主人合併。
有沒有更有效的方法來解決這種情況? (例如做一個提交,並移動它的父級?)
建議,這是解決方案,我想出來的:
方案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.patch
和git apply to-master.patch
。這使您可以更自由地重置所有內容,並嘗試結束,直到您將事情做好。
在這種情況下,我們正在處理兩個分支中存在的文件中的單行修復。這不會給任何合併衝突,並允許一些快捷方式,如checkout -m
。
我不知道這是你想要的,但我只是檢查出其他分支(它不會丟失未提交的更改),然後有選擇地簽入你想要提交的更改。
使用git add -i
來選擇你想要提交到這個分支的東西,然後改變主人並提交剩下的東西。
使用add -i
您可以選擇要準備提交哪些文件的哪些部分,然後提交它們,同時將相同文件的其他部分保留在提交之外。
您可以使用git add -i
來使用交互模式。您可以指定,要提交的內容以及要跳過的內容。
這樣你可以提交你的oneliners作爲單獨的提交。通過使用git cherry-pick
,您可以稍後將它們合併到您的主設備上。
一直在測試git cherry-pick,這個作品非常整潔!在rebase中,重複項會被git rebase --skip濾掉。謝謝你的提示! – vdboor 2009-12-04 09:55:32
git add -p
將使您直接進入修補模式,以遵循@ arkaitz-jimenez正確推薦的流程。
而不是使用git add -i
/git add -p
你也可以使用的git gui
交互式增加模式的基礎上以前的(或許還有其他git的圖形界面,這是CLUDE提交工具,例如像QGit,有此功能)
根據我的經驗,'add -p'是大多數人在使用'add -i'時想要的東西 – Dustin 2009-12-03 17:53:00
我經常使用'git add --patch'來處理這些情況,不幸的是我還想保留一些更改在工作副本中,所以我不能切換分支。 – vdboor 2009-12-04 08:54:16