git checkout而不覆盖数据

Léo*_* 준영 31 git git-merge git-checkout

你怎么能git-checkout不覆盖数据?

我跑

 git checkout master
Run Code Online (Sandbox Code Playgroud)

我明白了

error: Entry 'forms/answer.php' would be overwritten by merge. Cannot merge.
Run Code Online (Sandbox Code Playgroud)

这是令人惊讶的,因为我不知道Git合并时我git-checkout.我总是分别在命令之后运行git merge new-feature.如果Git在结账时合并,这似乎显然是不必要的.

Kar*_*and 54

Git警告您,forms/answers.php在您的工作副本或索引中有未更改的更改.

您可以使用git-stash保存更改,然后使用git-stash来恢复它们.

git-stash的常见用例是你正在进行更改但是必须暂时签出一个不同的分支来修复bug.因此,您可以在索引和工作副本中存储更改,检出其他分支,修复错误,提交,签出原始分支,然后使用git-stash应用以恢复您的更改并从中断处继续.

  • 无论出于何种原因,我都无法使用git-stash命令.相反,我不得不使用"git stash"(没有连字符). (3认同)

Jak*_*ski 19

当切换分支(使用)时,Git会对未经注释的更改进行双向合并git checkout <branch>,但通常它只会进行简单(树级)合并.

除了git-stash Karl Voigtland的解决方案,您可以为git checkout提供其他选项,选择以下选项之一:

  • 告诉git 更加努力地将未经注释的更改合并到您切换到-m/ --mergeoption的分支中.使用此选项,当前分支,工作树内容和新分支之间的三向合并已完成,您将进入新分支.

  • 告诉git 覆盖未经修改的更改,使用-foption 丢弃本地更改.警告:未经修改的更改将丢失!

  • 谢谢你.第二个(`git checkout -f master`)帮助我回来了.我不知道我失去了什么变化,但它们并不重要,因为这是一个非常旧的回购副本,我只是想检查一下. (2认同)
  • 可以做`git checkout -f`的"对立"吗?基本上我希望Git放弃检查会导致冲突的文件. (2认同)