[英]How to temporarily ignore untracked files on git pull?
我有一些我没有添加到git的新文件; 我不确定我会不会,我还是犹豫不决。 但我想得到服务器中的最新信息。
但是,当我执行git pull
我收到错误error: Your local changes to 'XXXX' would be overwritten by merge. Aborting.
error: Your local changes to 'XXXX' would be overwritten by merge. Aborting.
,其中XXXX是我的新文件。
我如何告诉git从服务器下载更改和新文件,告诉我服务器上的内容与我对存储库中已有文件的本地修改之间可能存在的冲突,同时不会中止,因为我在本地有新文件?
我不想将它们添加到.gitignore,因为我经常遇到这种情况,我不想一直在添加和删除.gitignore中的文件,因为我不想这么做...冒着忘记某个文件的风险,我最终决定将它添加到存储库中,所以我希望git status
能够不断告诉我这些文件。 有时我想忽略新文件时运行git status -uno
,然后有时我运行git status
来查看新内容并确定要保留什么以及丢弃什么。 但我找不到git pull
的等价选项。
我在谷歌搜索的尝试把我带到那些想要用存储库或其他类似场景中的内容覆盖他们的本地更改的人。 :(阅读文档后,我发现我可以做一个git fetch
来使我的本地存储库更新,这不会产生任何错误,但它也没有将更改带到我的工作副本。我不能弄清楚之后的下一步。: - /无论如何,没有错误的pull
将是理想的......
您必须首先存储它并在从远程控制器拉出或将当前分支重置为上次提交后应用更改。 重置分支将导致您丢失更改。
git stash
// after you have pulled from remote
git stash apply
// OR
git stash pop
关于apply
和pop
之间区别的一个非常好的解释可以在这里找到
您还可以使用以下命令选择重置当前分支。
git reset --hard
你可能知道, git pull
基本上是git fetch
然后是git merge
。
失败的步骤不是git fetch
,而是git merge
:
... overwritten by merge
注意这里的最后一个词是合并 。 这意味着你未定的:
我有一些我没有添加到git的新文件; 我不确定我会不会,我还是犹豫不决。
已经决定对你来说,别人的,至少一个这样的文件:特定的文件现在被添加,在其他承诺。 这就是Git将覆盖的那个。
您现在可以选择各种选项:
不合并(或不合并):您可以保留文件未跟踪。 我认为这很清楚,但它使情况得不到解决。 最终你(可能?)必须合并....
合并: 将跟踪文件。 然后,您可以选择Git如何处理现有的未跟踪文件:
还有一些额外的选项(例如rebase而不是合并)但是它们最终都是相同的情况:要么跟踪文件(因为它在你告诉Git要合并的提交中),要么你必须更新到那个提交, 删除该文件,并再次提交以进行不会跟踪该文件的提交。
“将文件保存在别处”的方式取决于您:例如,您可以完全将其从工作树中移出,或者您可以使用git stash
进行具有该文件的提交。
当它工作时, git stash
非常方便,但是因为它实际上使得两个或三个提交不在任何分支上,所以它是一个非常复杂的小动物,当它出错时它变得非常难以处理。 因此,对于任何本身可能很复杂的事情,我都希望避免使用 git stash
。 请注意, git stash
默认只保存被跟踪的文件,所以你必须git add
它才能进入git stash
通常发出的两个提交。 您可以使用git stash -u
专门进行第三次提交以保存未跟踪的文件,但这会使存储更难处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.