author | Conrad Irwin <conrad.irwin@gmail.com> | |
Sat, 20 Aug 2011 21:49:48 +0000 (14:49 -0700) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Mon, 22 Aug 2011 23:00:36 +0000 (16:00 -0700) | ||
commit | 55c4a673070f40f2ef12d0be269e95f1df6825a9 | |
tree | f3167659326c1308f6dfe3600ec0b57200cef335 | tree | snapshot |
parent | 1be9d84b2ed18c2b2e2d6a459d2b6d48d5ab86e5 | commit | diff |
Prevent force-updating of the current branch
"git branch -M <foo> <current-branch>" allows updating the current branch
which HEAD points, without the necessary house-keeping that git reset
normally does to make this operation sensible. It also leaves the reflog
in a confusing state (you would be warned when trying to read it).
"git checkout -B <current branch> <foo>" is also partly vulnerable to this
bug; due to inconsistent pre-flight checks it would perform half of its
task and then abort just before rewriting the branch. Again this
manifested itself as the index file getting out-of-sync with HEAD.
"git branch -f" already guarded against this problem, and aborts with
a fatal error.
Update "git branch -M", "git checkout -B" and "git branch -f" to share the
same check before allowing a branch to be created. These prevent you from
updating the current branch.
We considered suggesting the use of "git reset" in the failure message
but concluded that it was not possible to discern what the user was
actually trying to do.
Signed-off-by: Conrad Irwin <conrad.irwin@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
"git branch -M <foo> <current-branch>" allows updating the current branch
which HEAD points, without the necessary house-keeping that git reset
normally does to make this operation sensible. It also leaves the reflog
in a confusing state (you would be warned when trying to read it).
"git checkout -B <current branch> <foo>" is also partly vulnerable to this
bug; due to inconsistent pre-flight checks it would perform half of its
task and then abort just before rewriting the branch. Again this
manifested itself as the index file getting out-of-sync with HEAD.
"git branch -f" already guarded against this problem, and aborts with
a fatal error.
Update "git branch -M", "git checkout -B" and "git branch -f" to share the
same check before allowing a branch to be created. These prevent you from
updating the current branch.
We considered suggesting the use of "git reset" in the failure message
but concluded that it was not possible to discern what the user was
actually trying to do.
Signed-off-by: Conrad Irwin <conrad.irwin@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
branch.c | diff | blob | history | |
branch.h | diff | blob | history | |
builtin/branch.c | diff | blob | history | |
builtin/checkout.c | diff | blob | history | |
t/t2018-checkout-branch.sh | diff | blob | history | |
t/t3200-branch.sh | diff | blob | history |