gitgerritgit-commitgit-review

How to review a specific commit on Git


I sent a commit (named "A commit") to review (Gerrit) using git review command.

Now, I make a new commit (named "B commit") and I want to send it to review as well, but I don't want to re-send the "A commit". There is no dependencies each other.

How to send a review to gerrit for a specific commit?.

UPDATE:

$ git add --all


$ git status

# On branch delete_role
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   path/to/file.ext


$ git status

# On branch delete_role
nothing to commit (working directory clean)


$ git branch

*delete_role
 master


$ git log --graph --decorate --oneline -n13

* 531bd84 (HEAD, delete_role) commit 3
* df68f1a (master) commit 2
* 4ce2d8d commit 1
*   6751c7d (origin/master, origin/HEAD, gerrit/master)

Commit "df68f1a" and "4ce2d8d" are dependant and they have been sent in a previous git review command, but commit "531bd84" belongs to a new branch (delete_role) because is a new issue.

$ git review

You have more than one commit that you are about to submit.
The outstanding commits are:

531bd84 (HEAD, delete_role) commit 3
df68f1a (master) commit 2
4ce2d8d commit 1

I want to send to Gerrit only the "531bd84" commit, not the other ones.


Solution

  • Create the B commit in a new branch.

    While being on this branch, use git review and it will only push the content of this branch to Gerrit.

    This way, Gerrit won't consider that your commit B needs your commit A and if you want, you can merge your commit B to the working branch before commit A

    If your history is like this:

    ...-old(merged)-A(waiting for review)
    

    what you want to do is:

    ...-old(merged)-A(waiting for review) <-master branch
           \B(new commit)                 <-new branch
    

    Then, if you're on branch B, and use git review, it won't push anything else than commit B

    If you're in this situation:

    ...-old(merged)-A(waiting for review)-B
    

    , what you want to do to achieve the configuration we want is:

    git log (Note the SHA1 of your B commit)
    git reset HEAD^^^ (you go back in detched state three commits before, before the two you don't want to send)
    git checkout -b Breview (you create a new branch there)
    git cherry-pick +the SHA1 you noted (you copy your B commit on your new branch)
    git checkout master (you return on your branch with the two commit)
    git reset HEAD^--hard (you delete the B commit from this branch where you don't need it)
    

    Now, you achieved the wanted configuration and to push your B commit, you just need to do:

    git checkout Breview
    git review
    

    and it will only submit your B commit