需要:更改后更改Git分支

时间:2017-06-30 16:53:44

标签: git visual-studio-code

有时我在使用Visual Studio Code进行代码更改之前忘记更改分支。我已经尝试在更改后更改我的分支但是我得到了一个响应,例如'Git:以下文件的本地更改将被checkout覆盖'。如何将更改提交给我需要工作的分支?

2 个答案:

答案 0 :(得分:4)

git stash
git checkout <existing branch>
git stash apply

这将获取您在原始分支上所做的更改,并将它们放入您已创建的新分支中。 -b标志会立即切换到新分支。

编辑:如下所述,创建新分支时不需要git stash/apply(使用git checkout -b <new branch>)。但是,如果您尝试在没有存储的情况下签出现有分支,您将收到以下消息:

error: Your local changes to the following files would be overwritten by checkout:
    README.md
Please, commit your changes or stash them before you can switch branches.
Aborting

存储和应用时要小心,因为如果目标分支中有类似的编辑,最终可能会出现合并冲突。

答案 1 :(得分:2)

这里有几种机制。

让我在这里切断。相关性将进一步明显下降。

如果你做一个挑选,​​git将分析你挑选的提交的变化,并在你当前提交的基础上应用这些更改。

例如,如果您正在挑选的提交是在文件的底部或中间添加更多行,那么git会尝试在提交之前执行完全相同的操作。 #39;即使更改前的文件不同,也请重新开始。

现在,让我们回到你想要做的事情。您已对某些文件进行了一些更改,但尚未提交,现在您尝试在提交之前更改您所在的分支。

孤立地看,git可能会像上面那样做同样的事情。 git可以识别您已经完成的更改,并尝试将它们带到您想要的分支上。

但是有区别。如果樱桃选择不能干净地应用您的更改,您将最终发生合并冲突。如果你搞砸了试图解决这个合并冲突,你可以中止。然后重新启动,然后重试。

但是,由于您尚未提交更改,因此任何此类合并冲突都可能严重影响您已完成的更改,直至您遇到困难。你不能简单地放弃你所做的事情,因为你会丢失你的更改,并且git通过尝试将合并冲突修复到某一点而严重损害了你的文件。

所以git没有这样做。

如果您有未提交的更改,并尝试切换分支,则只有在两个分支之间更改的文件相同时才能执行此操作。如果不是,git将拒绝切换到新分支,因为任何合并冲突都可能严重损坏您的文件。

解决方案很简单,您有几个选择:

  1. 您可以执行git stash,它实际上会提交您的更改,然后切换分支,然后执行git stash pop。这将与git cherry-pick完全相同,您可以重新启动合并,您可以重试它,您可以这样做,知道任何问题都会保留您的存储,以便您不会丢失您的变化。
  2. 您可以进行实际提交,然后切换分支,然后执行git cherry-pick以提交提交。这将与上面相同,但您必须确保清理其他分支。最终的结果可能是相同的,但在你做出正确的事情的责任的方式上。