Re: Undo a commit that is already pushed to central server and merged to several branches

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Dec 7, 2011 at 16:35, Matthias Fechner <idefix@xxxxxxxxxxx> wrote:
> Am 07.12.11 15:42, schrieb Ramkumar Ramachandra:
>>
>> Assuming that you actually want to rewrite the history, the situation
>> calls for a git-reset(1).  Just "git reset --hard HEAD~1" on each of
>> your branches (Caution: first understand what it does!) and you'll
>
>
> that will not work, because in the master branch I already have around 15
> commits after the bogus commit and I want to keep these commits.
>
> And in some other branches there are tons of commits (over 100) after the
> bogus commit with the merge and I only want to remove that bogus commit but
> keep all other commits after the bogus commit (all commits are not related
> to the bogus one, they are all in different files).
>
> It is even fine if I could remove the bogus commit from all branches.

Use "git revert $commit" to undo the effects of the given $commit.
This must be applied to all affected branches (either by reverting in
the master branch and remerging master to the other branches, or by
using "git revert" in each individual branch).

Note that the "git revert" command will NOT remove the original bogus
commit. Instead, it will create a new commit that undoes the changes
introduced by the bogus commit. If the same lines/files have been
touched by other commits in the meantime, you might get conflicts that
you'll have to resolve, just like a regular merge.

If you'd rather want the bogus commit to disappear entirely (i.e.
rewrite the history so that it looks like the bogus comit never
happened in the first place), then things get more complicated. You
will need to recreate the history of your master branch, skipping the
bogus commit, and then recreate all the other branches in a similar
manner. The "git rebase" tool will be helpful here, but I recommend
that you understand and get used to how it works before applying it to
this problem. Note that rewriting history is only a good idea when you
haven't shared the history with anyone else. If other people are
already using any of the branches with the bogus commit, then
rewriting the history is a BIG NO-NO. In that case, "git revert" is
the only sane approach.


Have fun! :)

...Johan

-- 
Johan Herland, <johan@xxxxxxxxxxx>
www.herland.net
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]