Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Preview a Git push

Tags:

git

push

How can I see which commits are actually going to be pushed to a remote repository?

As far as I know, whenever I pull master from the remote repository, commits are likely to be generated, even if they're empty.

This causes the local master to be 'forward' even if there is really nothing to push.

Now, if I try (from master):

git cherry origin master 

I have an idea of what's going to be pushed, though this also display some commits that I've already pushed. Is there a way to display only the new content that's going to be pushed?

like image 505
Marcus Avatar asked Feb 01 '10 11:02

Marcus


People also ask

How do you see commits that will be pushed?

In Git, we can use git show commit_id --name-only to list all the committed files that are going to push to the remote repository.

How do you see what you committed in git?

If you have the hash for a commit, you can use the git show command to display the changes for that single commit. The output is identical to each individual commit when using git log -p .


1 Answers

Remember origin/master is a ref that points to the head of the master branch on the remote named origin at the last pull, so you could use a command such as

$ git log origin/master..master 

You could use git-preview-push below that comments on the output of 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
like image 161
Greg Bacon Avatar answered Sep 29 '22 08:09

Greg Bacon