如何在一些新文件中挑选一些文件中未经修改的变化?

时间:2016-04-27 07:09:29

标签: git git-commit cherry-pick

说我有分支和分支。我在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中的更改。

2 个答案:

答案 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