我如何强制将本地文件覆盖在git pull
我的本地仓库包含一个文件名文件名与服务器上的文件名相同。
错误: 未跟踪的工作树文件“ example. txt ” 会被合并覆盖
我如何强制将本地文件覆盖在git pull
我的本地仓库包含一个文件名文件名与服务器上的文件名相同。
错误: 未跟踪的工作树文件“ example. txt ” 会被合并覆盖
当前回答
根据我自己的类似经验,以上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
其他回答
解决这一问题的另一种办法是,首先将任何未承诺的改动用git stash
然后运行,然后运行
git pull --rebase=interactive -s recursive -X theirs
在互动的重新基础中,你可以改变你所有本地不想要的承诺drop
,这将摆脱他们 并离开你 在远程分支的头部 而不引入合并承诺。
现在你可以跑了git stash apply
如果你有 本地藏的改变 你想带回来。
我读了所有的答案,但我正在寻找一个命令来做到这一点。这是我所做的。在.gitconfig中添加了一个Git 化名。
[alias]
fp = "!f(){ git fetch ${1} ${2} && git reset --hard ${1}/${2};};f"
将命令运行为
git fp origin master
等于
git fetch origin master
git reset --hard origin/master
我知道一种容易和痛苦的方法:
$ git branch -m [branch_to_force_pull] tmp
$ git fetch
$ git checkout [branch_to_force_pull]
$ git branch -D tmp
就是这样!
这个解决方案总是在运行 。
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 checkout --theirs /path/to/file.extension
git pull origin master
这将用 Git 上的文件覆盖您的本地文件