Почему HEAD ~ 394 не работает, если у меня 394 unpressed коммитов git? - PullRequest
1 голос
/ 04 августа 2011

У меня есть следующий псевдоним:

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, а затем терпят неудачу. Есть какие-нибудь подсказки? Я использую git 1.7.5.2 в Debian Linux.

Ответы [ 2 ]

1 голос
/ 04 августа 2011

Лучшее объяснение, которое я могу придумать, это то, что оператор ~ не следует за ветвями. Это включает только первых родителей. Если вы хотите сослаться на последний выданный коммит, просто используйте origin/$GIT_CURRENT_BRANCH.

0 голосов
/ 04 августа 2011

Если вы хотите увидеть разницу между удаленной веткой и общим предком удаленной ветки и вашей локальной веткой (общим предком является коммит, который вы искали с помощью трюка HEAD ~ 394), вы должны получить этот общийпредка с помощью подкоманды merge-base.Затем вы можете увидеть разницу, используя:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...