将未提交的更改从当前分支移动到与这些更改冲突的另一个分支

时间:2014-04-11 21:14:38

标签: git git-branch git-checkout git-stash

假设我在分支master上,我开始做一些更改。

我对已在Emacs中打开的文件进行了更改(因此,当检查发生时,Emacs不知道,除非我不断地恢复缓冲)。

该文件确实存在于分支other_branch中,该分支旨在稍后合并到master。但该文件在master中不存在,直到我意外地将其从Emacs保存。

这些更改是未提交的,但我发现我不应该在master上进行更改,而是打算在开始更改之前检出不同的分支。

我不想丢失当前的工作,但也不想将其提交给master

我已尝试使用git stash后跟git checkout other_branch但这会给我一个错误,说明由于未提交的更改,我不允许将分支切换到other_branch

ems@computer:~$ git checkout other_branch
error: The following untracked working tree files would be overwritten by checkout:
    some_file
Please move or remove them before you can switch branches.
Aborting

我在master中开始(意外)修改的文件在other_branch中已经存在,所以只检查other_branch会破坏我的工作目录副本,这些更改是否正确?

我尝试了stash,它似乎确实隐藏了更改,但当我尝试结帐时,我收到了上面的错误消息。

摘要

  1. 结帐新的分支,other_branch跟踪master

  2. test.txt中创建一个新文件other_branch并将其打开,以便在Emacs中进行编辑。致力于other_branch

  3. 回到终端,结账大师。

  4. 回到Emacs,你忘了你现在在掌握,开始对test.txt进行一些更改并保存文件。就master而言,它是一个全新的文件。

  5. 如何将这些更改转换为other_branch

3 个答案:

答案 0 :(得分:0)

如果未结帐的文件在结帐时出现问题,也许您可​​以尝试:

git stash --include-untracked

来自git stash man page

  

如果使用--include-untracked选项,则所有未跟踪的文件也会被隐藏,然后使用git clean进行清理,使工作目录处于非常干净的状态


既然那也不起作用(在藏匿流行音乐上),你可以暗示:

  • 进行提交(在主分支中)
  • 结帐开发和提交的樱桃选择
  • 结帐以掌握并重置为HEAD~

答案 1 :(得分:0)

暂时重命名文件?

$ mv test.txt test.txt.tmp
$ git checkout other_branch
$ mv test.txt.tmp test.txt

检查变化&提交

答案 2 :(得分:0)

对我有用的是:

master执行git add获取未跟踪,冲突的文件。现在跟踪它,执行git stash并结帐other_branch。现在,git stash pop将尝试将已跟踪的跟踪版本与已跟踪的other_branch版本合并。这可能会产生合并冲突,因此您必须打开文件并解决所有冲突,并确保在git addcommitother_branch。然后返回master并验证文件是否已暂存以进行提交,并且不存在于该分支中。

这允许将它们视为在存储中跟踪它们,但不需要实际提交并从主服务器进行合并。