有时我在使用Visual Studio Code进行代码更改之前忘记更改分支。我已经尝试在更改后更改我的分支但是我得到了一个响应,例如'Git:以下文件的本地更改将被checkout覆盖'。如何将更改提交给我需要工作的分支?
答案 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将拒绝切换到新分支,因为任何合并冲突都可能严重损坏您的文件。
解决方案很简单,您有几个选择:
git stash
,它实际上会提交您的更改,然后切换分支,然后执行git stash pop
。这将与git cherry-pick
完全相同,您可以重新启动合并,您可以重试它,您可以这样做,知道任何问题都会保留您的存储,以便您不会丢失您的变化。git cherry-pick
以提交提交。这将与上面相同,但您必须确保清理其他分支。最终的结果可能是相同的,但在你做出正确的事情的责任的方式上。