Предварительно просмотрите нажатие Мерзавца

Как я могу видеть, какие фиксации на самом деле будут продвинутыми в удаленный репозиторий?

Насколько я знаю, каждый раз, когда я вытягиваю ведущее устройство из удаленного репозитория, фиксации, вероятно, будут сгенерированы, даже если они будут пусты.

Это заставляет локальное ведущее устройство быть 'вперед', даже если нет действительно ничего для продвижения.

Теперь, если я пробую (от ведущего устройства):

git cherry origin master

У меня есть идея того, что будет продвинутым, хотя это также отображает некоторые фиксации, которые я уже продвинул. Существует ли способ отобразить только новое содержание, это будет продвинутым?

40
задан Peter Mortensen 24 July 2017 в 11:47
поделиться

2 ответа

Запомните, что origin/master - это ссылка, указывающая на голову основной ветки на пульте дистанционного управления с именем 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";
  }
}

Example usage:

$ git preview-push /tmp/bare master
To /tmp/bare
270f8e6bec7af9b2509710eb1ae986a8e97068ec baz
4c3d1e89f5d6b0d493c9d0c7a06420d6b2eb5af7 bar
25
ответ дан 27 November 2019 в 01:56
поделиться

Если вы поместите это в свой профиль 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
}
0
ответ дан 27 November 2019 в 01:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: