154

ここに2つの異なる質問がありますが、関連していると思います。

  1. Git を使用している場合、ローカルにコミットしたものの、まだリモート ブランチにプッシュしていない変更を見つけるにはどうすればよいですか? Mercurial コマンドに似たものを探していhg outgoingます。

  2. Git を使用している場合、pull を実行する前にリモート ブランチに加えられた変更を確認するにはどうすればよいですか? Mercurial コマンドに似たものを探していhg incomingます。

2 つ目: 何が利用可能かを確認し、プルしたい変更を選択する方法はありますか?

4

11 に答える 11

116

Git 1.7.0以降、アップストリームブランチを一般的に参照できる特別な構文があります:@{u}または@{upstream}

模倣するにはhg incoming

git log ..@{u}

模倣するにはhg outgoing

git log @{u}..

上記を使いやすくするために、以下incomingとエイリアスを使用します。outgoing

git config --global alias.incoming '!git remote update -p; git log ..@{u}'
git config --global alias.outgoing 'log @{u}..'
于 2011-06-17T17:18:37.267 に答える
99

Git は、Hg のようにネットワーク経由でそのような情報を送信することはできません。しかし、リモート サーバーから新しいコミットを取得するために実行することができますgit fetch(これは よりも似ていhg pullます)。hg fetch

したがって、 というブランチmasterと というリモートがある場合origin、 を実行した後git fetch、 というブランチもあるはずorigin/masterです。その後、 を実行して、 のスーパーセットにする必要がgit logあるすべてのコミットを取得できます。この 2 つを逆にすると、逆になります。masterorigin/mastergit log master..origin/master

私の友人である David Dollar は、 をシミュレートする 2 つの git シェル スクリプトを作成しましたhg incoming/outgoing。それらはhttp://github.com/ddollar/git-utilsにあります。

于 2008-10-23T20:31:36.523 に答える
43

完全な答えではありませんが、git fetchはリモートリポジトリをプルし、マージを行いません。その後、

gitdiffマスターオリジン/マスター

于 2008-10-23T20:07:24.890 に答える
34
  1. 「git log origin..HEAD」を使用

  2. 「git fetch」の後に「git log HEAD..origin」を使用します。リストされたコミット ID を使用して、個々のコミットを選択できます。

もちろん、上記は「origin」がリモート追跡ブランチの名前であることを前提としています (これは、デフォルト オプションで clone を使用した場合です)。

于 2008-10-23T19:55:45.410 に答える
22

すべてのブランチを比較するために、これもあります:

git log --branches --not --remotes=origin

これは、git log の man ページがこれについて述べていることです:

ローカル ブランチにはあるが、オリジンのリモート トラッキング ブランチには含まれていないすべてのコミットを表示します (そのオリジンにはありません)。

上記は 用outgoingです。の場合incoming、交換するだけです:

git log --remotes=origin --not --branches
于 2011-05-25T09:57:40.900 に答える
8

私はするだろう

$ git fetch --dry-run

hg incomingと_

$ git push --dry-run

のためにhg outgoing

于 2014-01-21T14:30:36.983 に答える
1

git-outhg outgoingは非常に正確にエミュレートするスクリプトです。「push -n」出力で解析するため、プッシュする追加の引数を指定する必要がある場合に正確な出力が生成されます。

于 2011-11-05T00:33:57.393 に答える
0

「git log」と @{u} の回答で最初に「不明なリビジョン」エラーが表示されたとき、私は Chris/romkyns の提案を試してみましたgit push --dry-run

「5905..4878 master->master」のような出力が得られます。5905 は、リモートが持っている最新のコミットであり、4878 を介して (およびそれを含めて) コミットすると、リモートに適用されます。

その後、5905..4878 を他のいくつかの git コマンドの引数として使用して、詳細を取得できます。

git diff 5905..4878 # Gives full code changes in diff style

git log --online 5905..4878 # Displays each commit's comment
于 2014-07-07T16:32:42.677 に答える
0

git着信

$ git fetch && git log ..origin/master --stat
OR
$ git fetch && git log ..origin/master --patch

git発信

$ git fetch && git log origin/master.. --stat
OR
$ git fetch && git log origin/master.. --patch
于 2013-12-09T12:45:29.490 に答える
-1

git fetch を実行すると、ブランチ、タグ ( refs) を含むすべてのコンテンツが一時的に .git/FETCH_HEAD に保存され、そのコンテンツは次のコマンドで表示できます: git log FETCH_HEAD git fetch で接尾辞 -a を使用しない場合、デフォルトで、FETCH_HEAD のコンテンツは新しいコンテンツで上書きされます。これらのコンテンツから、マージする場合はどのブランチにマージするかを表示して決定できます。または、フェッチによってもたらされたものからいくつかのコミットのみが必要な場合は、簡単にチェリー ピックを行うことができます。

于 2015-10-21T21:02:58.587 に答える