说我有分支和分支。我在file1,file2中做了几处更改。但是,最后,我最终对明显修复的事情进行了重构,比如fileA,fileB。
现在我想创建一个不同的分支,将<my_feature>
中的这些更改隔离开来,只需提交{file,文件B即可<my_updates>
。
目前我没有在file1,file2,fileA和fileB中进行提交的更改。
我一直在阅读git cherry-pick
and git apply
,但它涉及已经提交的内容。
既然这些改变都没有提交,我不知道我是应该提交这个和樱桃采摘还是有更好的方法来处理。
为了确保图片清晰,让我们看一眼:
我想这样做:
master ------------------
\--- my_feature ----/
file1
file2
但现在我有了
master ------------------
my_feature ----/
file1
file2
fileA
fileB
我希望在继续<my_feature>
之前合并它(fileA,fileB中的更改):
master ------------------
\--- my_updates ----/
fileA
fileB
这样<my_feature>
将只包含file1,file2中的更改。
答案 0 :(得分:2)
您可以git stash
,转移到新分支,然后git stash pop
。然后你可以做进一步的工作或提交结果。
您还可以通过将git diff
的输出定向到文件(git diff > changes.patch
)或剪贴板(OS {X git diff | pbcopy
或Ubuntu中的git diff | xclip -selection clipboard
)来创建补丁。然后,您可以将git apply
的补丁应用于任何其他分支。
答案 1 :(得分:0)
对于记录,这是我用来使其工作的完整命令集:
在分支<my_feature>
中,将差异存储在补丁中:
git diff fileA fileB > /tmp/changes.patch
存储更改以便稍后重复使用:
git stash -u
使用该补丁从master
创建一个新分支:
git checkout master
git checkout -b my_updates
git patch /tmp/changes.patch
git add fileA fileB
git commit -m "Updated fileA, fileB because blabla"
git push
返回分支<my_feature>
并恢复隐藏的更改:
git checkout my_feature
git stash pop
摆脱fileA和fileB中的更改,因为它们已经到位:
git checkout fileA fileB