忽略Git中的本地文件更改

94

我都已经尝试过了。

git update-index --assume-unchanged config/myconfig

并且编辑.git/info/exclude并添加config/myconfig

然而,当我执行git pull时,总是得到以下结果:

正在更新0156abc..1cfd6a5 错误:您对以下文件所做的本地更改将被合并覆盖: config/myconfig 请在合并之前提交您的更改或将它们存储起来。 终止

我错过了什么吗?


可能是重复的问题:如何在使用 Git pull 命令时强制覆盖本地文件 - bperson
6个回答

135

git pull要求你删除或保存当前的工作,以使其触发的合并不会与你未提交的工作产生冲突。请注意,如果你拉取的更改在同一位置创建了文件,则只需要删除/保存未跟踪的文件。

删除未提交的更改

已跟踪的文件

git checkout -f

未跟踪的文件

git clean -fd

将更改保存到稍后

已追踪的文件

git stash

被追踪的文件和未被追踪的文件

git stash -u

git pull 后重新应用你最近的存储:

git stash pop

4
最后一个命令应该是 git stash apply 或者 git stash pop。(pop就是先执行apply再执行drop。我倾向于将这两个步骤分开,以防出现问题,但与此同时,我更喜欢创建临时提交而不是一开始就进行贮藏...) - torek
1
哎呀,刚才那个是错误的,我改成git stash pop了。谢谢。 - Nick McCurdy

52

你很可能已经将文件暂存了。

git add src/file/to/ignore

要撤销已暂存的文件,

git reset HEAD
这将取消暂存文件,使得下一个 git 命令能够成功执行。
git update-index --assume-unchanged src/file/to/ignore

3
你好,我之前执行了 git update-index --assume-unchanged src/file/to/ignore 命令,现在我想要跟踪 /file/to/ignore 文件的更改,该怎么撤销这个命令呢? - user1735921
4
git update-index --no-assume-unchanged src/file/to/ignore 意思是取消对src/file/to/ignore文件的修改忽略标记。 - Eric
2
我认为skip-worktree比未更改的索引更好。 - user1735921
1
Git的文档说明了我提供的解决方案。这不仅基于工作经验,而且是git关于正确操作的建议。 - Eric

2

在执行 git pull 命令之前,你可能需要先执行 git stash 命令。这是因为 Git 会读取旧的配置文件。因此,请执行以下命令:

git stash
git pull
git commit -am <"say first commit">
git push

还可以参考git-stash(1)手册页面


1

如果您不想保留本地更改,那么执行以下命令以忽略(永久删除)本地更改。

  • 如果是未提交的更改,请执行checkout命令(git checkout <filename>git checkout -- .
  • 如果是已提交的更改,请先执行reset命令(git reset <filename>git reset),然后再执行checkout命令(git checkout <filename>git checkout -- .
  • 如果是未跟踪的文件/文件夹(新创建的),请执行clean命令(git clean -fd

如果您不想丢失本地更改,请将其存储并进行pull或rebase。稍后从存储中合并您的更改。

  • 执行git stash,然后从存储库获取最新更改git pull orign mastergit rebase origin/master,然后从stash中合并您的更改git stash pop stash@{0}

如何撤销 git checkout <filename> 的影响。 - Anshul Sahni
这不是用户要求的内容。这解释了如何恢复本地更改,而不是如何忽略它们。 - Kelthar

0
在Git 2.23中引入了git restore。详细信息请查看this stackoverflowwww.git-tower.com
以下是放弃本地更改和取消暂存更改的命令:
放弃本地已跟踪的更改: git restore .git restore file1 file2 ... 放弃本地未跟踪的更改: git clean -fd 取消暂存更改: git restore --staged .git restore --staged file1 file2 ...

0
当你想要结账时,但是远程的更改与本地的更改冲突时,使用-f似乎只会清除冲突的文件。
git checkout -f $branch

你切换到新的分支后,本地的更改会被清除,而未跟踪的文件会被保留。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接