你怎么能git-checkout
不覆盖数据?
我跑
git checkout master
我明白了
error: Entry 'forms/answer.php' would be overwritten by merge. Cannot merge.
这令人惊讶,因为我不知道 Git 在我git-checkout
. 我总是在命令之后单独运行git merge new-feature
。如果 Git 在结帐时合并,这显然是不必要的。
你怎么能git-checkout
不覆盖数据?
我跑
git checkout master
我明白了
error: Entry 'forms/answer.php' would be overwritten by merge. Cannot merge.
这令人惊讶,因为我不知道 Git 在我git-checkout
. 我总是在命令之后单独运行git merge new-feature
。如果 Git 在结帐时合并,这显然是不必要的。
Git 警告您 forms/answers.php 在您的工作副本或索引中有尚未提交的更改。
您可以使用git-stash保存更改,然后git-stash apply来恢复它们。
git-stash的常见用例是您正在处理更改,但随后必须临时签出不同的分支以进行错误修复。因此,您可以将更改存储在索引和工作副本中,签出另一个分支,进行错误修复,提交,签出原始分支,然后git-stash 应用以恢复您的更改并从您离开的地方继续。
Git在切换分支时(使用)对未提交的更改进行 2 路合并git checkout <branch>
,但通常它只进行微不足道的(树级)合并。
除了git-stash
Karl Voigtland 的解决方案,您还可以为git checkout提供其他选项,选择以下选项之一:
告诉 git更加努力地将未提交的更改合并-m
到您使用/--merge
选项切换到的分支中。使用此选项,当前分支、工作树内容和新分支之间的三向合并完成,您将位于新分支上。
告诉 git覆盖-f
未提交的更改,使用选项丢弃本地更改。警告:未提交的更改将丢失!
您可以执行 agit reset --soft
来HEAD
说明新分支,但保留所有文件原样(包括在新分支中更改的文件)。然后,您可以使用git checkout
仅从新分支中签出您真正想要的文件。
git reset [<mode>] [<commit>]
This form resets the current branch head to <commit> and possibly updates the index (resetting it to the
tree of <commit>) and the working tree depending on <mode>. If <mode> is omitted, defaults to --mixed.
The <mode> must be one of the following:
--soft
Does not touch the index file or the working tree at all (but resets the head to <commit>, just like
all modes do). This leaves all your changed files "Changes to be committed", as git status would put
it.
Jakub 也提到git checkout --merge
过,但在撰写本文时,我不推荐此选项。就我而言,它因“错误:脏索引:无法合并”而失败并破坏了我的整个工作副本,而没有将其备份到任何存储或类似的东西中。不要使用它,而是使用传统的存储。