am --skip: revert changes introduced by failed 3way merge
authorPaul Tan <pyokagan@gmail.com>
Sat, 6 Jun 2015 11:46:07 +0000 (19:46 +0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 8 Jun 2015 20:05:43 +0000 (13:05 -0700)
commit88d5072466de2e0ba256a283eaaa6a79e31735a5
tree95b295e7faf8fd1c29a64f3aea7930d1e7a1ab9e
parentfdf96a20acf96a6ac538df8113b2aafd6ed71d50
am --skip: revert changes introduced by failed 3way merge

Even when a merge conflict occurs with am --3way, the index will be
modified with the results of any succesfully merged files (such as a new
file). These changes to the index will not be reverted with a
"git read-tree --reset -u HEAD HEAD", as git read-tree will not be aware
of how the current index differs from HEAD.

To fix this, we first reset any conflicting entries from the index. The
resulting index will contain the results of successfully merged files.
We write the index to a tree, then use git read-tree -m to fast-forward
the "index tree" back to HEAD, thus undoing all the changes from the
failed merge.

Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-am.sh
t/t4151-am-abort.sh