检查本地git repo是否已提交所有内容并推送到master

时间:2012-01-12 06:05:51

标签: git

我有一些shell脚本,我想查看我的一个git repos。我想要 知道该回购是否已经提交了所有内容以及是否将其推送到掌握。 在此测试之前,我进行git fetch以确保我有最新的更改。

我找到了检查repo是否有一些未提交更改的方法:

if ! git --work-tree=$HOME/git/project --git-dir=$HOME/git/project/.git diff-index --quiet HEAD --; then
    echo "Has some changes";
fi

但这不是我唯一需要的东西。我也想确保我所有的 本地提交被推向掌握。

最简单的方法是什么?

4 个答案:

答案 0 :(得分:8)

一种非常简单的方法就是简单地调用

  

git push -n

(“-n”是“--dry-run”的缩写,这意味着它不会进行推送,而是会告诉你它会推动什么)

如果它说“一切都是最新的”,那么你已经把一切都推到了原点。

或者,它将为您提供尚未推送到原点的所有提交的列表。

或者,如果您尚未撤消原点的更改,那么它可能会抱怨可能由推送引起的合并(这会重复“有一些更改”,检查您已经在做什么)

答案 1 :(得分:7)

您可以通过以下方式检查所有内容是否已提交:

git diff --exit-code && git diff --cached --exit-code

在典型配置中,成功推送到master中的origin后,远程跟踪分支origin/master将会更新。因此,要检查是否已推送所有更改,您可以测试是否:

git rev-parse --verify master

...与:

相同
git rev-parse --verify origin/master

答案 2 :(得分:1)

git fetch之后,要检查分支机构中是否存在尚未推送到远程设备的本地提交,请尝试以下操作:

git diff --exit-code <remote>/<branch>..<branch>

这也会告诉您遥控器中是否有本地没有的提交。请注意,这只是检查更改,因此如果远程和本地分支中的更改提交相同,则此命令可能无法检测到此更改。在脚本中,我通常将其传递给/dev/null并检查返回状态。因此,假设您的遥控器为origin且分支为master,则命令如下所示:

git diff --exit-code origin/master..master > /dev/null

正如其他人所建议的那样,我还使用git diff --exit-codegit diff --cached --exit-code来检查本地未提交的更改。

答案 3 :(得分:-1)

从马克·朗格尔(Mark Longair)那里得到的答案,我明白这是可以检查的 当地的git repo已经提交并推送了所有东西,但你需要运行 这样做的几个命令。

我写了一个小脚本,完成所有这些并以一种非常方式写出来 已经发生了。

$ is_git_synced ~/git/* --only_errors
Error: path '/home/bessarabov/git/Dancer' has staged changes
Error: path '/home/bessarabov/git/Ubic' has some divergences with remote 'origin'

您还可以使用退出代码来查明是否所有内容都已提交 推或不。

在Github:https://github.com/bessarabov/App-IsGitSynced和CPAN:https://metacpan.org/module/App::IsGitSynced