假设我在分支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
,它似乎确实隐藏了更改,但当我尝试结帐时,我收到了上面的错误消息。
摘要
结帐新的分支,other_branch
跟踪master
。
在test.txt
中创建一个新文件other_branch
并将其打开,以便在Emacs中进行编辑。致力于other_branch
。
回到终端,结账大师。
回到Emacs,你忘了你现在在掌握,开始对test.txt
进行一些更改并保存文件。就master
而言,它是一个全新的文件。
如何将这些更改转换为other_branch
?
答案 0 :(得分:0)
如果未结帐的文件在结帐时出现问题,也许您可以尝试:
git stash --include-untracked
如果使用
--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 add
上commit
和other_branch
。然后返回master
并验证文件是否已暂存以进行提交,并且不存在于该分支中。
这允许将它们视为在存储中跟踪它们,但不需要实际提交并从主服务器进行合并。