The following untracked working tree files would be overwritten by merge, but I don't care
在我的分支上,我在.gitignore中有一些文件
在另一个分支上,这些文件不是。
我想将不同的分支合并到我的分支中,我不在乎这些文件是否不再被忽略。
不幸的是,我得到了:
The following untracked working tree files would be overwritten by merge
号
如何修改pull命令以覆盖这些文件,而不必自己查找、移动或删除这些文件?
问题是,您没有在本地跟踪文件,但相同的文件是在远程跟踪的,因此为了"拉"您的系统将被迫覆盖不受版本控制的本地文件。
尝试跑步
1 2 3 | git add * git stash git pull |
这将跟踪所有文件,删除对这些文件的所有本地更改,然后从服务器获取这些文件。
您可以尝试命令从本地清除未跟踪的文件
Git 2.11及更高版本1 | git clean -d -f . |
号旧版Git
1 | git clean -d -f"" |
其中-d可以替换为以下内容:
-X表示忽略的文件也会被删除,以及Git不知道的文件。
-d意味着除了未跟踪的文件之外,还要删除未跟踪的目录。
-F必须强制运行。
这是一个有帮助的链接。
唯一对我有用的命令是:
1 2 | git fetch --all git reset --hard origin/{{your branch name}} |
如果这是一次性操作,您可以在执行拉操作之前从工作目录中删除所有未跟踪的文件。已阅读"如何从当前Git工作树中删除本地(未跟踪)文件"?有关如何删除所有未跟踪文件的信息。
确保不要意外地删除您仍然需要的未跟踪文件;)
你可以试试这个命令
1 | git clean -df |
。
删除所有未跟踪的文件:
1 | git clean -d -fx . |
。
这个答案与其他答案有什么不同?
这里介绍的方法只删除将被合并覆盖的文件。如果目录中还有其他未跟踪(可能被忽略)的文件,此方法将不会删除它们。
解决方案
此代码段将提取将被
1 | git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} rm -rf"{}" |
。
然后就这么做:
1 | git pull |
号
这不是git-chinace命令,因此请始终仔细检查它将如何处理:
1 | git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} echo"{}" |
号
解释-因为一句话很吓人:
下面是它所做工作的细目:
用瓷质命令替换步骤1-3是很好的,但我不知道有什么等效的。
除了接受的答案之外,如果不再需要这些文件,您当然可以通过指定文件来删除它们:
1 | git clean -f '/path/to/file/' |
如果您想查看哪些文件将被git clean删除,请记住首先使用-n标志运行它。请注意,这些文件将被删除。在我的情况下,我不管怎样都不在乎他们,所以这对我来说是一个更好的解决方案。
如果考虑使用
1 2 3 | -n --dry-run Don’t actually remove anything, just show what would be done. |
。
1 2 3 4 5 6 7 8 9 10 11 12 13 | # FOI is the 'files of interest', the untracked files blocking the merge. # 1. This forcibly replaces untracked FOI with tracked versions of # the donor branch (as well as updating the rest of the working dir). git checkout -f donor-branch # 2. This removes the FOI because they they are tracked in our current # (donor) branch, and absent in the `receiving-branch` we switch to. git checkout receiving-branch # 3. Now that the FOI are absent, merging in the donor branch will not # overwrite any untracked files, so we get no errors. git merge donor-branch |
。
在您的问题中,您会问"我如何修改我的
pull只不过是
1 2 3 4 | git fetch origin git checkout -f origin/mybranch git checkout mybranch git merge origin/mybranch |
实现这一点的一种方法是将本地更改存储起来,并从远程回购中提取。这样,您就不会丢失本地文件,因为这些文件将被存放。
1 2 3 | git add -A git stash git pull |
您可以使用这个命令-