1

我有以下别名:

unpushed== !GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && 
  git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline

当我使用 执行此操作时|wc -l,它告诉我我有 394 个未推送的提交。我用这个号码跑git diff somecommitid HEAD~394。这失败并出现以下错误:

fatal: ambiguous argument 'HEAD~394': unknown revision or path not in the working tree.

奇怪的是,它一直工作到数字 358。在另一个克隆中,我有 478 次提交,并且 git 命令包括git show工作到 HEAD~411 然后失败。有什么线索吗?我在 debian linux 上使用 git 1.7.5.2。

4

2 回答 2

1

我能想到的最好的解释是~操作员不遵循分支。它只包括第一任父母。如果你想引用上次推送的提交,只需使用origin/$GIT_CURRENT_BRANCH.

于 2011-08-03T21:17:57.817 回答
0

如果您想查看远程分支与远程分支和本地分支的共同祖先之间的差异(共同祖先是您使用 HEAD~394 技巧寻找的提交),您必须通过使用获取这个共同祖先合并基础子命令。然后,您可以使用以下命令查看差异:

git diff $(git merge-base $GIT_CURRENT_BRANCH origin/$GIT_CURRENT_BRANCH) $GIT_CURRENT_BRANCH

该命令在分支分歧和 origin/$GIT_CURRENT_BRANCH 是 $GIT_CURRENT_BRANCH 的祖先的两种情况下都有效

此外,如果两个分支都发散,您可以通过执行查看“未拉动”更改的差异

git diff $(git merge-base $GIT_CURRENT_BRANCH origin/$GIT_CURRENT_BRANCH) origin/$GIT_CURRENT_BRANCH
于 2011-08-03T22:40:27.357 回答