我如何强制将本地文件覆盖在git pull
我的本地仓库包含一个文件名文件名与服务器上的文件名相同。
错误: 未跟踪的工作树文件“ example. txt ” 会被合并覆盖
我如何强制将本地文件覆盖在git pull
我的本地仓库包含一个文件名文件名与服务器上的文件名相同。
错误: 未跟踪的工作树文件“ example. txt ” 会被合并覆盖
当前回答
我用这个命令清除了本地文件, 阻止我进行拉/ 合并。 但是要小心! 运行 !git merge …
首先查看是否只有那些您真的想要删除的文件 。
git merge origin/master 2>&1 >/dev/null | grep ^[[:space:]] | sed s/^[[:space:]]//g | xargs -L1 rm
git merge
列表中列出了所有这些文件。它们是由一些空白空间预设的。2>&1 >/dev/null
将错误输出重定向到标准输出 1 。grep
.grep ^[[:space:]]
只过滤带有文件名称的行。sed s/^[[:space:]]//g
从一开始就调整白空格。xargs -L1 rm
调来电话rm
在每个文件上,删除它们。谨慎地处理:git merge
产出、产出、rm
将呼吁每个以白色空格开始的行 。
其他回答
我也有类似的问题,我不得不这么做
git reset --hard HEAD
git clean -f
git pull
这个解决方案总是在运行 。
cd $GIT_ROOT_DIRECTORY
git fetch origin/$TARGET_BRANCH
git rm -rf --cached .
git reset --hard origin/TARGET_BRANCH
git clean -df
git pull origin $TARGET_BRANCH
我也有同样的问题 没人给我这个解决方案 但对我有用
我解决它的方法是:
.git
目录。git reset --hard HEAD
git pull
git push
现在它的工作原理。
警告: 警告:git clean
删除所有未跟踪的文件/目录,无法撤销。
有时只是偶尔clean -f
如果您有未跟踪的主管, -d 选项也需要 :
# WARNING: this can't be undone!
git reset --hard HEAD
git clean -f -d
git pull
警告: 警告:git clean
删除所有未跟踪的文件/目录,无法撤销。
考虑使用-n
(--dry-run
) 旗号先行。这将显示要删除的内容,但实际上没有删除任何内容:
git clean -n -f -d
示例产出:
Would remove untracked-file-1.txt
Would remove untracked-file-2.txt
Would remove untracked/folder
...
根据我自己的类似经验,以上Strahinja Kustudidic提出的解决方案是迄今为止最好的。 正如其他人已经指出的那样,仅仅努力重设就会消除全部( 全部)未跟踪的文件, 其中可能包含很多您不想删除的文件, 例如配置文件。 更安全的做法是只删除即将添加的文件, 而对于这个事项, 您可能还想要检查任何即将更新的本地修改过的文件 。
因此,我更新了Kustudic的脚本来做这个。我还修了个打字机(在原文中遗漏了一个字)。
#/bin/sh
# Fetch the newest code
git fetch
# Delete all files which are being added,
# so there are no conflicts with untracked files
for file in `git diff HEAD..origin/master --name-status | awk '/^A/ {print $2}'`
do
echo "Deleting untracked file $file..."
rm -vf "$file"
done
# Checkout all files which have been locally modified
for file in `git diff HEAD..origin/master --name-status | awk '/^M/ {print $2}'`
do
echo "Checking out modified file $file..."
git checkout $file
done
# Finally merge all the changes (you could use merge here as well)
git pull