{"id":192,"date":"2008-02-13T00:22:41","date_gmt":"2008-02-13T04:22:41","guid":{"rendered":"http:\/\/benjamin.smedbergs.us\/blog\/2008-02-13\/splitting-a-changesetpatch\/"},"modified":"2008-02-13T00:22:41","modified_gmt":"2008-02-13T04:22:41","slug":"splitting-a-changesetpatch","status":"publish","type":"post","link":"http:\/\/benjamin.smedbergs.us\/blog\/2008-02-13\/splitting-a-changesetpatch\/","title":{"rendered":"Splitting a Changeset\/Patch"},"content":{"rendered":"<p>I have a common problem with revision control:<\/p>\n<ol>\n<li>Clone a tree\n<li>Start working on a problem X (say, adding valgrind annotations to MMgc) with edits to <code>GC.cpp<\/code>\n<li>Get distracted and start working on problem Y (say, MMgc crashing) with edits to <code>GC.cpp<\/code>\n<li>I now have <a href=\"http:\/\/hg.mozilla.org\/users\/bsmedberg_mozilla.com\/xpcomgc-tamarin-patches\/?file\/6932d8476f00\/valgrind-annotations\">unrelated changes in GC.cpp<\/a> that I&#8217;d like to separate.\n<\/ol>\n<p>Dear lazyweb, is there a tool I can use to interactively separate out these changes into two changesets? The solution should work with my mercurial workflow, no &#8220;use git-rebase&#8221; comments please. I happen to be using patch queues, but a solution that worked on real mercurial changesets or on raw patches would also be acceptable. It happens that usually the patch hunks for problem X and problem Y are completely separate, so a simple tool that let me throw &#8220;this hunk for X, this hunk for Y&#8221; would probably be ok. Better would be something like a three-way merge tool where I can edit an intermediate state between a fixed start-point and end-point.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I have a common problem with revision control: Clone a tree Start working on a problem X (say, adding valgrind annotations to MMgc) with edits to GC.cpp Get distracted and start working on problem Y (say, MMgc crashing) with edits to GC.cpp I now have unrelated changes in GC.cpp that I&#8217;d like to separate. Dear [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[41,78],"class_list":["post-192","post","type-post","status-publish","format-standard","hentry","category-mozilla","tag-mercurial","tag-patches"],"_links":{"self":[{"href":"http:\/\/benjamin.smedbergs.us\/blog\/wp-json\/wp\/v2\/posts\/192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/benjamin.smedbergs.us\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/benjamin.smedbergs.us\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/benjamin.smedbergs.us\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/benjamin.smedbergs.us\/blog\/wp-json\/wp\/v2\/comments?post=192"}],"version-history":[{"count":0,"href":"http:\/\/benjamin.smedbergs.us\/blog\/wp-json\/wp\/v2\/posts\/192\/revisions"}],"wp:attachment":[{"href":"http:\/\/benjamin.smedbergs.us\/blog\/wp-json\/wp\/v2\/media?parent=192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/benjamin.smedbergs.us\/blog\/wp-json\/wp\/v2\/categories?post=192"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/benjamin.smedbergs.us\/blog\/wp-json\/wp\/v2\/tags?post=192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}