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

时间:2014-11-12 09:57:03

标签: git

我有一个应用补丁的脚本,有时它因任何原因失败(在我的情况下是文件权限)。我想在修复问题后再次运行脚本,但是之前的git apply尝试可能会有剩余的文件。

我不想运行git clean,这会丢掉我想保留的其他文件。我只想替换那些受补丁影响的未跟踪文件。

我的剧本:

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就好了。

1 个答案:

答案 0 :(得分:0)

您可以尝试几种选择。

  • 在应用运行git apply --check而不是应用修补程序时,请查看是否可以应用该修补程序,如果不能中止它。如果检查恢复正常,请继续正常运行git apply
  • 应用运行git apply --cached直接应用于索引但保持工作副本不变。如果失败则只清除索引。如果它可以继续并提交它。