如何将某些文件中未提交的更改挑选到新分支中?
How to cherry pick uncommited changes in some files into a new branch?
假设我有 branch 和 branch 。我一直在对 file1、file2 进行几处更改。但是,同时,我最终对明显固定的东西进行了重构,比如在文件 A、文件 B 中。
现在我想创建一个不同的分支来隔离 <my_feature>
中的这些更改,以便说 <my_updates>
只提交文件 A、文件 B。
目前,我在 file1、file2、fileA 和 fileB 中有未提交的更改。
我一直在阅读有关 git cherry-pick
and git apply
的内容,但它涉及已经提交的内容。
现在 none 这些更改已经提交,我不知道我是否应该提交这个和樱桃采摘,或者是否有更好的方法来处理。
为了确保图片清晰,让我们对其进行一些可视化处理:
我想做的:
master ------------------
\--- my_feature ----/
file1
file2
但现在我有
master ------------------
my_feature ----/
file1
file2
fileA
fileB
我想在继续 <my_feature>
:
之前合并这个(文件 A、文件 B 中的更改)
master ------------------
\--- my_updates ----/
fileA
fileB
这样 <my_feature>
将只包含文件 1、文件 2 中的更改。
您可以 git stash
,移动到一个新的分支然后 git stash pop
。然后你可以做进一步的工作或提交结果。
您还可以通过将 git diff
的输出定向到文件 (git diff > changes.patch
) 或剪贴板(git diff | pbcopy
for OS X 或 git diff | xclip -selection clipboard
在 Ubuntu 中)。然后,您可以将该补丁与 git apply
应用到任何其他分支。
作为记录,这是我用来让它工作的完整命令集:
在分支 <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
假设我有 branch 和 branch 。我一直在对 file1、file2 进行几处更改。但是,同时,我最终对明显固定的东西进行了重构,比如在文件 A、文件 B 中。
现在我想创建一个不同的分支来隔离 <my_feature>
中的这些更改,以便说 <my_updates>
只提交文件 A、文件 B。
目前,我在 file1、file2、fileA 和 fileB 中有未提交的更改。
我一直在阅读有关 git cherry-pick
and git apply
的内容,但它涉及已经提交的内容。
现在 none 这些更改已经提交,我不知道我是否应该提交这个和樱桃采摘,或者是否有更好的方法来处理。
为了确保图片清晰,让我们对其进行一些可视化处理:
我想做的:
master ------------------
\--- my_feature ----/
file1
file2
但现在我有
master ------------------
my_feature ----/
file1
file2
fileA
fileB
我想在继续 <my_feature>
:
master ------------------
\--- my_updates ----/
fileA
fileB
这样 <my_feature>
将只包含文件 1、文件 2 中的更改。
您可以 git stash
,移动到一个新的分支然后 git stash pop
。然后你可以做进一步的工作或提交结果。
您还可以通过将 git diff
的输出定向到文件 (git diff > changes.patch
) 或剪贴板(git diff | pbcopy
for OS X 或 git diff | xclip -selection clipboard
在 Ubuntu 中)。然后,您可以将该补丁与 git apply
应用到任何其他分支。
作为记录,这是我用来让它工作的完整命令集:
在分支 <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