我有一些尚未添加到 git 的新文件;我不确定我会不会,我还没有决定。但我想获得服务器中的最新信息。
但是,当我执行 a 时git pull出现错误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
Run Code Online (Sandbox Code Playgroud)
上的区别很好的解释apply,并pop可以发现这里
您还可以选择使用以下命令重置当前分支。
git reset --hard
Run Code Online (Sandbox Code Playgroud)
您可能知道,git pull基本上git fetch后面跟着git merge.
失败的步骤不是git fetch,而是git merge:
Run Code Online (Sandbox Code Playgroud)... overwritten by merge
请注意这里的最后一个词是merge。这意味着你的犹豫不决:
我有一些新文件还没有添加到 git 中;我不确定我会不会,我还没有决定。
已经由其他人为您决定,至少对于一个这样的文件:该特定文件现在已添加到另一次提交中。这就是 Git 将覆盖的那个。
您现在可以选择多种选项:
不合并(或暂不合并):您可以不跟踪文件。我认为这已经很清楚了,但问题却没有得到解决。最终你(可能?)必须合并......
合并:文件将被跟踪。然后,您可以选择 Git 如何处理现有的未跟踪文件:
还有一些其他选项(例如变基而不是合并),但它们最终都会遇到相同的情况:要么跟踪文件(因为它位于您告诉 Git 合并的提交中),要么您必须更新到该提交,删除该文件,然后再次提交以进行不会跟踪该文件的提交。
“将文件保存在其他地方”的方式取决于您:例如,您可以将其完全移出工作树,或者您可以用来git stash进行包含该文件的提交。
当它工作时,git stash非常方便,但是因为它实际上进行了两到三个不在任何分支上的提交,所以它是一个相当复杂的小野兽,当它出错时,它变得非常难以处理。因此,对于任何本身可能很复杂的事情,我喜欢避免 git stash。请注意,git stash默认情况下仅存储跟踪的文件,因此您必须git add将其放入git stash通常进行的两次提交中。您可以专门git stash -u进行第三次提交来保存未跟踪的文件,但这会使存储变得更难处理。
| 归档时间: |
|
| 查看次数: |
8782 次 |
| 最近记录: |