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 showHEAD~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 トリックで探していたコミットです) との差分を見たい場合は、次を使用してこの共通の祖先を取得する必要があります。 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
于 2011-08-03T22:40:27.357 に答える