From: Ramkumar Ramachandra <artagnon@gmail.com>
To: Nguyen Thai Ngoc Duy <pclouds@gmail.com>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: Re: How to split a big commit
Date: Mon, 4 Apr 2011 18:30:20 +0530 [thread overview]
Message-ID: <20110404130016.GA16975@kytes> (raw)
In-Reply-To: <BANLkTikFXzut7fY5Tr0u-abu5Q0rMUOCmA@mail.gmail.com>
Hi Nguyen,
Nguyen Thai Ngoc Duy writes:
> After a lot of small commits and a few mixed up large commits, it was
> too messy that I merged them all into one big commit then started
> spliting it into smaller, reasonable patches. Just wonder if anybody
> else faces the same thing and how they deal with it. I used "git reset
> --soft <big commit>^" and "git add -N" because there were new files,
> but it was clumsy.
To split a big commit, I simply reverse-diff-apply the changes that I
don't want in the big commit, and I stage all changes. Then, I again
reverse-diff-apply all the staged changes, and keep that in the
unstaged portion. Your repository should look like this now:
commit bigcommit
diff --git a/bigfile b/bigfile
+Desirable change
+Undesirable change
Staged changes:
diff --git a/bigfile b/bigfile
-Undesirable change
Unstaged changes:
diff --git a/bigfile b/bigfile
+Undesirable change
Now simply 'commit --amend' to remove the undesirable change from the
bigcommit, and commit the unstaged changes to produce a new
commit. Final result:
commit bigcommit
diff --git a/bigfile b/bigfile
+Desirable change
commit newcommit
diff --git a/bigfile b/bigfile
+Undesirable change
I can afford to do this kind of jugglery very easily because I use
Magit with Emacs. After highlighting the relevant portions,
reverse-diff-apply is one keystroke :) But yes, you're probably right-
there should be an easier way to do this. Maybe a 'git split' that
allows you to interactively select the portions of an existing commit
that you'd like to exclude from the commit and turn into a new commit?
Hope that helps.
-- Ram
next prev parent reply other threads:[~2011-04-04 13:01 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-04 11:52 How to split a big commit Nguyen Thai Ngoc Duy
2011-04-04 13:00 ` Ramkumar Ramachandra [this message]
2011-04-04 14:25 ` Nguyen Thai Ngoc Duy
2011-04-05 0:08 ` Jonathan Nieder
2011-04-05 2:31 ` Lasse Makholm
2011-04-05 2:52 ` Nguyen Thai Ngoc Duy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110404130016.GA16975@kytes \
--to=artagnon@gmail.com \
--cc=git@vger.kernel.org \
--cc=pclouds@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.