git checkout -f并不总是丢弃本地更改

时间:2016-07-01 17:31:27

标签: git

我的具体情况: 带有About类的Java程序,该类由项目中的其他几个类导入。编译时,About.java文件会自动重新生成,但不会被触及。

  • 我不想从repo和.gitignore中删除文件,因为这意味着当某个人最初拉下了repo时,About.java文件就不存在了。不可否认,这不是世界末日,因为它会在第一次编译时产生,但仍然,那时IDE中存在错误,等等。我只是不喜欢这样。我想要一些可编辑的文件版本,即使我不关心它的具体内容是什么(因为它们将在编译时被覆盖)。

  • 在我的本地分支中进行编译和重新生成之后,我希望git忽略这样一个事实:文件被改变为'git status','git diff','git add -i',等等,以便我的编辑对其进行更改不会使我的真实的签到错误。

  • 在我的本地分支中进行编译和重新生成后,我希望能够切换到另一个分支并让git不用担心我当前的本地分支有一个更改的About.java文件。只需丢弃更改,然后转到我正在切换到的分支中的About.java。

我尝试在文件上使用'git update-index skip-worktree'组合,然后使用'git checkout -f'切换分支,但它不起作用。 checkout -f to switch branches抱怨About.java文件的条目是“not uptodate。无法合并。”

结帐的男人-f说: “当切换分支时,即使索引或工作树与HEAD不同,也要继续。这用于丢弃本地更改。

当从索引中检出路径时,不要在未合并的条目上失败;相反,未合并的条目将被忽略。“

这听起来就像我想要的那样,但是当我在上面的场景中使用它时,它仍然在未合并的条目上失败。那是为什么?

顺便说一下,我也试过搞乱'git update-index --assume-unchanged',但我仍然无法得到所有三种所需的行为(基础版本保留在回购中,当我做/签入更改忽略了一个文件已更改的事实,并且允许我更改分支并且真正不会因为一个文件是未合并的条目而失败“在一起玩

目前,我有使用skip-worktree的行为1和行为2,然后当我想要更改分支时,我必须先手动重置该文件。工作,但必须始终这样做非常烦人。有没有办法让结帐-f做它的人工页面应该做什么,并达到我想要的完整行为?

1 个答案:

答案 0 :(得分:0)

请参阅:How to ignore files only locally in git?

git update-index --skip-worktree FILENAME