我如何强制将本地文件覆盖在git pull我的本地仓库包含一个文件名文件名与服务器上的文件名相同。

错误: 未跟踪的工作树文件“ example. txt ” 会被合并覆盖


当前回答

我试图在三角2Webpack-Starter上使用第2号材料分支, 并度过了一段很漫长的时光。 这是我唯一可以下载和使用该分支的方法。

git clone --depth 1 https://github.com/angularclass/angular2-webpack-starter.git

cd angular2-webpack-starter/

git checkout -b material2

打开工程文件夹, 删除所有非隐藏的文件和文件夹。 留下所有隐藏的文件和文件夹 。

git add .

git commit -m "pokemon go"

git reset --hard

git pull origin material2

(当编辑器弹出时,按“:wq”键,然后按输入)

现在你准备好了

其他回答

根据我自己的类似经验,以上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 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将呼吁每个以白色空格开始的行 。

步骤1。 (可选择)
从本地主控件库的根根, 保存备份和空当前文件夹:

mkdir -p ../<branch>-bkp && mv --backup=t * ../<branch>-bkp

步骤2从远程仓库下载分支的所有文件和文件夹 :

git checkout <branch> && git add -A . && git reset --hard origin/<branch> && git pull

替换位置<branch>使用要覆盖的分支的名称。

评论:

  • 你可能更喜欢手动手动将当前文件和文件夹替换为步骤1.
    事实上,我建议建议建议建议建议在操作系统的 GUI 中与文件管理员一起这样做 。
  • 如果你跳过步骤1注意: 您将失去本地仓库的所有工作 !
  • 重要:如果你离开,git pull步骤2,
    您可能无法从远程仓库获取最新版本!
    根据下文的第二个参考,git reset --hard
    重置中继区和工作目录以匹配最近的承诺.
    我的经历与这个说法相矛盾!
  • 如果你逃跑git reset --hard origin/<branch_to_overwrite>不要先从本地主控库删除所有文件和文件夹, 请小心, 任何仍然埋在周围的垃圾文件都可能偷偷潜入远程仓库 。git push即使这不是你的本意
    额外git add -A .步骤2如果您选择退出, 防止发生这种情况步骤1.

参考文献:
https://gitforwindows.org/
https://www.atlassian.com/git/tutorials/undoing-changes/git-reset
https://www.atlassian.com/git/tutorials/rewriting-history/git-reflog

看起来最好的办法是首先做到:

git clean

删除所有未跟踪的文件,然后继续按常规git pull...

我试图在三角2Webpack-Starter上使用第2号材料分支, 并度过了一段很漫长的时光。 这是我唯一可以下载和使用该分支的方法。

git clone --depth 1 https://github.com/angularclass/angular2-webpack-starter.git

cd angular2-webpack-starter/

git checkout -b material2

打开工程文件夹, 删除所有非隐藏的文件和文件夹。 留下所有隐藏的文件和文件夹 。

git add .

git commit -m "pokemon go"

git reset --hard

git pull origin material2

(当编辑器弹出时,按“:wq”键,然后按输入)

现在你准备好了