42

どのコミットが実際にリモートリポジトリにプッシュされるかを確認するにはどうすればよいですか?

私の知る限り、リモートリポジトリからマスターをプルすると、空であってもコミットが生成される可能性があります。

これにより、実際にプッシュするものがない場合でも、ローカルマスターは「転送」されます。

さて、(マスターから)試してみると:

git cherry origin master

何がプッシュされるかはわかっていますが、これには、すでにプッシュしたコミットも表示されます。プッシュされる新しいコンテンツのみを表示する方法はありますか?

4

4 に答える 4

25

origin/master最後のプルで名前が付けられたリモートのマスター ブランチのヘッドを指す ref を覚えているoriginので、次のようなコマンドを使用できます。

$ git log origin/master..master

git-preview-pushの出力に関するコメントの下で使用できますgit push --dry-run --porcelain

#! /usr/bin/env perl

use warnings;
use strict;

die "Usage: $0 remote refspec\n" unless @ARGV == 2;
my($origin,$refspec) = @ARGV;
my @cmd = qw/ git push --dry-run --porcelain /;
no warnings 'exec';
open my $fh, "-|" => @cmd, $origin, $refspec or die "$0: exec: $!";
# <flag> \t <from>:<to> \t <summary> (<reason>)
my $update = qr/^ (.*)         \t    # flag (optional)
                  (\S+):(\S+)  \t    # from:to
                  (.+)               # summary
                  (?:[ ] \((.+)\))?  # reason
                $/x;

while (<$fh>) {
  next unless my($flag,$from,$to,$summary,$reason) = /$update/;
  if ($flag eq "!") {
    print "$0: $refspec rejected:\n", $_;
  }
  elsif ($flag eq "=") {
    print "$0: $refspec up-to-date\n";
  }
  if ($summary =~ /^[0-9a-f]+\.\.[0-9a-f]+$/) {
    system("git log --pretty=oneline $summary") == 0
      or warn "$0: git log exited " . ($? >> 8);
  }
  elsif ($summary eq "[new branch]") {
    print "$0: $refspec creates a new branch.\n";
  }
}

使用例:

$ git preview-push /tmp/bare master
/tmp/bare へ
270f8e6bec7af9b2509710eb1ae986a8e97068ec バズ
4c3d1e89f5d6b0d493c9d0c7a06420d6b2eb5af7 バー
于 2010-02-01T12:18:53.227 に答える
5

これを行うための git wtf というツールを作成しました: https://github.com/michaelklishin/git-wtf。色とすべて!

おまけとして、機能ブランチと統合ブランチの関係も表示されます。

于 2011-04-11T20:36:21.607 に答える
3

~/.gitconfig に次のエイリアスを追加して、(プル中に) マージされるもの、プッシュされるもの、およびリモートと比較するためのエイリアスを示します。

[alias]
        # diff remote branch (e.g., git diff origin/master master)
        difr = "diff @{u}"

        # similar to hg incoming/outgoing, showing what would be pulled/pushed
        # use option "-p" to see actual patch
        incoming = "!git remote update -p; git log ..@{u}"

        # showing what would be pushed (see also alias difr)
        outgoing = log @{u}..
于 2012-12-05T21:11:18.397 に答える
0

これを Bash プロファイルにドロップすると、grin (Git リモート受信) と grout (Git リモート送信) を実行して、オリジン マスターの受信および送信のコミットの差分を表示できます。

function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}

function gd2 {
    echo branch \($1\) has these commits and \($2\) does not
    git log $2..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}

function grin {
    git fetch origin master
    gd2 FETCH_HEAD $(parse_git_branch)
}

function grout {
    git fetch origin master
    gd2 $(parse_git_branch) FETCH_HEAD
}
于 2010-05-14T00:28:14.383 に答える