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