Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测git pull是否会由于未跟踪的本地文件而失败?_Git - Fatal编程技术网

如何检测git pull是否会由于未跟踪的本地文件而失败?

如何检测git pull是否会由于未跟踪的本地文件而失败?,git,Git,当您执行Git pull时,Git正确地给出了一个错误,因为合并的提交将创建一个您在本地拥有但未被跟踪的文件 错误:合并将覆盖以下未跟踪的工作树文件 我希望在脚本中检测到这种情况,以便在真正执行git pull之前对其进行处理。 我该怎么做?我尝试了git pull--dry run,但令人恼火的是没有注意到pull会失败(git版本2.11.0) 试验 注意。我意识到我可以“清理”未跟踪的文件;未跟踪的文件是令人讨厌的;我可以隐藏更改等,但这不是我想要的。git pull是一个快捷方式:git

当您执行
Git pull
时,Git正确地给出了一个错误,因为合并的提交将创建一个您在本地拥有但未被跟踪的文件

错误:合并将覆盖以下未跟踪的工作树文件

我希望在脚本中检测到这种情况,以便在真正执行git pull之前对其进行处理。

我该怎么做?我尝试了git pull--dry run,但令人恼火的是没有注意到pull会失败(git版本2.11.0)

试验
注意。我意识到我可以“清理”未跟踪的文件;未跟踪的文件是令人讨厌的;我可以隐藏更改等,但这不是我想要的。

git pull
是一个快捷方式:
git fetch
+
git merge

在施加拉力之前“检测”的一种方法是:

  • 运行
    git fetch
  • 检查远程分支中的某些文件是否与磁盘上的现有文件冲突:

    • 对上游分支运行
      git merge--no commit

      # if current branch is "linked" to a remote branch,
      # @{u} is a shortcut to say "the linked remote branch"
      git merge --no-commit @{u}
      
      # or you can explicitly name the remote reference :
      git merge --no-commit origin/you/know/what/branch
      
    • 查看此操作是否触发任何错误或合并冲突

    • 恢复到以前的状态:

      git merge --abort
      

另一种检查“此合并是否会产生冲突?”的方法出现在

中。感谢的提示,我发现了一些似乎有效的方法:

function merge_will_work {
  git diff master..origin/master | git apply --check &>/dev/null
  return $?
}
  • 创建修补程序
  • 测试它是否可以干净地应用
  • (重要的是)不会以任何方式更改单个文件。(避免了文件可能瞬间更改的合并/合并中止情况。)

切勿在脚本中使用git pull。(好吧,几乎从来没有。递归获取和合并,以及子模块,是丑陋的。但拉是非常瓷,一点也不友好。)谢谢你的评论。这是一个交互式脚本,可以节省我打字的时间;这不是一个自动化的过程。即使如此,只要将其分解为fetch+merge即可。您将知道合并是否会因为合并失败而失败。如果合并成功的话,你可以退出合并(或者使用
--no commit
,就像我投了赞成票的答案一样),如果这是总体计划的一部分。我想这是我不清楚该怎么做的第二个要点
function merge_will_work {
  git diff master..origin/master | git apply --check &>/dev/null
  return $?
}