如何强制git apply覆盖未跟踪的文件?

如何强制git apply覆盖未跟踪的文件?,git,Git,我有一个应用补丁的脚本,有时会因为任何原因(在我的例子中是文件权限)而失败。我想在修复问题后再次运行脚本,但是可能会有以前git apply尝试的遗留文件 我不想运行gitclean,这会丢弃我想保留的其他文件。我只想替换那些受修补程序影响的未跟踪文件 我的剧本: for SITE in $SITES do echo "Updating $SITE ..." cd /home/klausi/web/$SITE chmod u+w sites/default git fetch

我有一个应用补丁的脚本,有时会因为任何原因(在我的例子中是文件权限)而失败。我想在修复问题后再次运行脚本,但是可能会有以前git apply尝试的遗留文件

我不想运行
gitclean
,这会丢弃我想保留的其他文件。我只想替换那些受修补程序影响的未跟踪文件

我的剧本:

for SITE in $SITES
do
  echo "Updating $SITE ..."
  cd /home/klausi/web/$SITE
  chmod u+w sites/default
  git fetch
  git reset --hard origin/master
  git apply --index /home/klausi/web/7.33.patch
  git commit -m "Updated Drupal core to 7.33."
  git push
done
当我再次运行此操作时,我得到:

error: misc/throbber-active.gif: already exists in working directory
error: misc/throbber-inactive.png: already exists in working directory
error: modules/simpletest/tests/themes/test_theme/templates/node--1.tpl.php: already exists in working directory

所以像git-apply-force这样的东西会很好。

有几个选项可以尝试

  • 当应用run
    git apply时——检查
    to而不是应用补丁,看看它是否可以应用,如果不能,就中止它。如果检查结果正常,则继续执行并正常运行
    git apply
  • 应用run
    git apply--cached
    直接应用于索引,但保留工作副本不变。如果失败,只需清除索引即可。如果成功了,就去做吧

因此,解决方法是在重置之前使用“rm-rf模块misc”——硬重置。这就把目录扔掉了,我不关心其中未跟踪的文件。