在我的分支上,我在.gitignore中有一些文件
在另一个分支上,这些文件不是。
我想将不同的分支合并到我的分支中,我不关心这些文件是否不再被忽略。
不幸的是,我得到了这个:
以下未跟踪的工作树文件将被合并覆盖
我如何修改我的pull命令来覆盖这些文件,而不需要我自己找到、移动或删除这些文件?
在我的分支上,我在.gitignore中有一些文件
在另一个分支上,这些文件不是。
我想将不同的分支合并到我的分支中,我不关心这些文件是否不再被忽略。
不幸的是,我得到了这个:
以下未跟踪的工作树文件将被合并覆盖
我如何修改我的pull命令来覆盖这些文件,而不需要我自己找到、移动或删除这些文件?
当前回答
问题是,当我们有传入的更改,将合并未跟踪的文件,git抱怨。这些命令帮助了我:
git clean -dxf
git pull origin master
其他回答
您可以试试这个命令
git clean -df
编辑: 请注意,这将删除可能有价值的未跟踪文件。 感谢@zhekaus
我有同样的问题,每当我尝试合并主在我的本地分支它说
以下未跟踪的工作树文件将被合并M.xcworkspace/xcshareddata/swiftpm/Package.resolved覆盖
但以上任何一个答案对我都不起作用。当我做git状态没有未跟踪的文件,所以当我做git添加。没有文件得到阶段性,因此存储不能解决问题,也不能像上面回答的那样强制签出。
我可以通过运行上面提到的命令来解决这个问题,但更重要的是,我必须关闭Xcode(即使在运行干净命令后,它也可能会创建导致我出现问题的文件)。
Git clean -dfxn(检查什么可以删除)
Git清除-d -fx。(删除上述文件)
Git 2.23(2019年第三季度)后的回答不会像Esteis的回答中那样使用旧的、令人困惑的Git checkout命令。
你可以用:
Git开关切换分支 Git恢复恢复文件(如图所示)
So:
安全地删除/覆盖麻烦的文件
当你想合并时:
git switch -f receiving-branch # -f is an alias for --discard-changes.
git merge donor-branch # merge works
当你想拉的时候:
git switch -f mybranch # automatically track origin/mybranch
git pull
它避免了:
git清洗危险操作 分离的头像一个git checkout origin/myBranch) 显式的拉,因为git switch有一个猜测模式,相当于git switch -c <branch>——track <remote>/<branch>。这意味着简单的git拉就足够了。
如果你考虑使用-f标志,你可以先运行它作为一个演练。你只需要提前知道你接下来会遇到什么样有趣的情况;-P
-n
--dry-run
Don’t actually remove anything, just show what would be done.
更新-一个更好的版本
此工具(https://github.com/mklepaczewski/git-clean-before-merge)将:
删除未跟踪的文件,这些文件与它们的git拉等价物相同, 将更改还原到修改后的文件,这些文件的修改版本与它们的git拉等价物相同, 报告修改/未跟踪的文件,与他们的git拉版本不同, 该工具有——pretend选项,不会修改任何文件。
旧版本
这个答案与其他答案有何不同?
这里给出的方法只删除将被merge覆盖的文件。如果目录中有其他未跟踪(可能被忽略)的文件,此方法将不会删除它们。
解决方案
这段代码将提取所有将被git删除并覆盖的未跟踪文件。
git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} rm -rf "{}"
然后就这样做:
git pull
这不是git瓷器命令,所以总是仔细检查它会做什么:
git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} echo "{}"
解释——因为有一句台词很吓人:
以下是它的功能:
git pull 2>&1 - capture git pull output and redirect it all to stdout so we can easily capture it with grep. grep -E '^\s - the intent is to capture the list of the untracked files that would be overwritten by git pull. The filenames have a bunch of whitespace characters in front of them so we utilize it to get them. cut -f2- - remove whitespace from the beginning of each line captured in 2. xargs -I {} rm -rf "{}" - us xargs to iterate over all files, save their name in "{}" and call rm for each of them. We use -rf to force delete and remove untracked directories.
如果用瓷器命令代替第1-3步就太好了,但我不知道有什么等价的。