Как я могу видеть, какие фиксации на самом деле будут продвинутыми в удаленный репозиторий?
Насколько я знаю, каждый раз, когда я вытягиваю ведущее устройство из удаленного репозитория, фиксации, вероятно, будут сгенерированы, даже если они будут пусты.
Это заставляет локальное ведущее устройство быть 'вперед', даже если нет действительно ничего для продвижения.
Теперь, если я пробую (от ведущего устройства):
git cherry origin master
У меня есть идея того, что будет продвинутым, хотя это также отображает некоторые фиксации, которые я уже продвинул. Существует ли способ отобразить только новое содержание, это будет продвинутым?
Запомните, что 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
Если вы поместите это в свой профиль 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
}