【发布时间】:2014-04-11 21:14:38
【问题描述】:
假设我在分支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,它似乎确实隐藏了更改,但是当我尝试结帐时,我收到了上面的错误消息。
总结
checkout 一些新的分支,
other_branchtrackingmaster。在
other_branch中创建一个新文件test.txt并在Emacs 中打开它进行编辑。提交给other_branch。回到终端,结账大师。
回到 Emacs,您忘记了您现在是 master,开始对
test.txt进行一些更改并保存文件。就master而言,这是一个全新的文件。
您如何将这些更改转移到other_branch?
【问题讨论】:
-
git status紧跟在您的git stash之后是什么?git stash的全部意义在于清理工作树,然后它应该允许你想要的任何结帐。 -
stash似乎没有对未跟踪的文件做任何事情——例如未提交的文件。看起来问题在于该文件(在结帐期间在 emacs 中打开)确实 not 存在于master -
所以,相对于
master,这是一个新文件,而不是隐藏文件的一部分。
标签: git git-branch git-checkout git-stash