/
usr
/
share
/
doc
/
git
/
howto
/
/usr/share/doc/git/howto
mkdir
upload
Name
Size
Mode
Actions
coordinate-embargoed-releases.html
29838
0644
edit
dl
rm
coordinate-embargoed-releases.txt
10823
0644
edit
dl
rm
keep-canonical-history-correct.html
26249
0644
edit
dl
rm
keep-canonical-history-correct.txt
6795
0644
edit
dl
rm
maintain-git.html
41732
0644
edit
dl
rm
maintain-git.txt
18220
0644
edit
dl
rm
new-command.html
22001
0644
edit
dl
rm
new-command.txt
4460
0644
edit
dl
rm
rebase-from-internal-branch.html
24456
0644
edit
dl
rm
rebase-from-internal-branch.txt
6310
0644
edit
dl
rm
rebuild-from-update-hook.html
20387
0644
edit
dl
rm
rebuild-from-update-hook.txt
3137
0644
edit
dl
rm
recover-corrupted-blob-object.html
23884
0644
edit
dl
rm
recover-corrupted-blob-object.txt
5510
0644
edit
dl
rm
recover-corrupted-object-harder.html
36038
0644
edit
dl
rm
recover-corrupted-object-harder.txt
14607
0644
edit
dl
rm
revert-a-faulty-merge.html
30865
0644
edit
dl
rm
revert-a-faulty-merge.txt
10856
0644
edit
dl
rm
revert-branch-rebase.html
24740
0644
edit
dl
rm
revert-branch-rebase.txt
7823
0644
edit
dl
rm
separating-topic-branches.html
20526
0644
edit
dl
rm
separating-topic-branches.txt
3356
0644
edit
dl
rm
setup-git-server-over-http.html
30562
0644
edit
dl
rm
setup-git-server-over-http.txt
8613
0644
edit
dl
rm
update-hook-example.html
23272
0644
edit
dl
rm
update-hook-example.txt
6289
0644
edit
dl
rm
use-git-daemon.html
19649
0644
edit
dl
rm
use-git-daemon.txt
2135
0644
edit
dl
rm
using-merge-subtree.html
20235
0644
edit
dl
rm
using-merge-subtree.txt
3025
0644
edit
dl
rm
using-signed-tag-in-pull-request.html
26765
0644
edit
dl
rm
using-signed-tag-in-pull-request.txt
8282
0644
edit
dl
rm
Edit:
/usr/share/doc/git/howto/separating-topic-branches.txt
(3356B)
From: Junio C Hamano <gitster@pobox.com> Subject: Separating topic branches Abstract: In this article, JC describes how to separate topic branches. Content-type: text/asciidoc How to separate topic branches ============================== This text was originally a footnote to a discussion about the behaviour of the git diff commands. Often I find myself doing that [running diff against something other than HEAD] while rewriting messy development history. For example, I start doing some work without knowing exactly where it leads, and end up with a history like this: "master" o---o \ "topic" o---o---o---o---o---o At this point, "topic" contains something I know I want, but it contains two concepts that turned out to be completely independent. And often, one topic component is larger than the other. It may contain more than two topics. In order to rewrite this mess to be more manageable, I would first do "diff master..topic", to extract the changes into a single patch, start picking pieces from it to get logically self-contained units, and start building on top of "master": $ git diff master..topic >P.diff $ git checkout -b topicA master ... pick and apply pieces from P.diff to build ... commits on topicA branch. o---o---o / "topicA" o---o"master" \ "topic" o---o---o---o---o---o Before doing each commit on "topicA" HEAD, I run "diff HEAD" before update-index the affected paths, or "diff --cached HEAD" after. Also I would run "diff --cached master" to make sure that the changes are only the ones related to "topicA". Usually I do this for smaller topics first. After that, I'd do the remainder of the original "topic", but for that, I do not start from the patchfile I extracted by comparing "master" and "topic" I used initially. Still on "topicA", I extract "diff topic", and use it to rebuild the other topic: $ git diff -R topic >P.diff ;# --cached also would work fine $ git checkout -b topicB master ... pick and apply pieces from P.diff to build ... commits on topicB branch. "topicB" o---o---o---o---o / /o---o---o |/ "topicA" o---o"master" \ "topic" o---o---o---o---o---o After I am done, I'd try a pretend-merge between "topicA" and "topicB" in order to make sure I have not missed anything: $ git pull . topicA ;# merge it into current "topicB" $ git diff topic "topicB" o---o---o---o---o---* (pretend merge) / / /o---o---o----------' |/ "topicA" o---o"master" \ "topic" o---o---o---o---o---o The last diff better not to show anything other than cleanups for cruft. Then I can finally clean things up: $ git branch -D topic $ git reset --hard HEAD^ ;# nuke pretend merge "topicB" o---o---o---o---o / /o---o---o |/ "topicA" o---o"master"
Save
cmd:
run