有什么方法可以知道我完美地镜像了上游分支?

Any way to know I'm perfectly mirroring an upstream branch?

我的小组有一项政策,即只有一个人可以更改 GitHub 上的 master 分支。他是一位 Git 大师,在 origin/master.

上进行复杂的提交管理

其他人被告知使用(在确保我在 master 分支之后):

git pull --rebase origin master

以确保我们完美地镜像 origin。但是,我知道我偶尔会忘记 --rebase。现在我想知道,我的本地 master 是否与 origin 上的不同步?

上述命令是否只有在它们同步时才会成功?如果不行我该怎么办?

如果您不指定 --rebase,您将合并上游 originmaster 分支(即 origin/master)到您当前检查的分支。如果您指定 --rebase,您的更改将在 origin/master 之上重播。最终结果应该是相同的。

如果您经常忘记指定 --rebase,那么您也可以使用配置选项启用它:git config pull.rebase true。启用此选项后,每次拉取时,您的更改将重新定位而不是合并。


回答您问题的标题:运行 git log HEAD..origin/master(与 git fetch 同步历史记录后)。如果它没有显示任何提交,则您的工作是 up-to-date 的来源。如果它显示提交,则 origin/master 中有尚未集成到您的本地工作副本中的提交。

正在检查更新

查看本地分支是否与其远程分支同步的最简单方法是使用 git fetch,然后使用 git status

git fetch 更新有关远程分支机构的信息,但不更新其本地分支机构的信息。

git status 显示有关分支和工作树的当前状况的信息。如果它是遥控器的最新日期,它应该说

On branch x
Your branch is up to date with 'origin/x'.

在您的特定情况下,x 将是 master

另一方面,如果你的分支不是最新的,因为你添加了一个提交,例如,它会说

On branch x
Your branch is ahead of 'origin/x' by 1 commit.

git pull --rebase 做什么

git pull, is actually a shortcut for git fetch followed by git merge. With --rebase modifier, instead of git merge git rebase已使用。

简而言之,git mergegit rebase 都将更改从一个分支应用到另一个分支,但它们的方式不同。您可能需要查看文档或以下 SO 答案以获取更多信息:git merge, git rebase.