Re: [RFC/PATCH 1/2] reset: learn to reset to tree
- From
Martin von Zweigbergk <martinvonz@gmail.com>
- Date
- Nov 29, 2012, 22:00 UTC
- Message-ID
- <CANiSa6hWYsfm0t+s_q7=CcD78yNfpuduxkRc35xW8qDOy97W3g@mail.gmail.com>
- In-Reply-To
- <7vzk20p6ik.fsf@alter.siamese.dyndns.org>
On Thu, Nov 29, 2012 at 11:13 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 6 quoted lines
> [...]These > two commands, "reset" and "checkout", share that the source we grab > the blobs out of only need to be a tree and does not have to be a > commit, and the only difference between them is where the blobs we > grabbed out of that tree go, either only to the index or to both the > index and the working tree.
Slightly off topic, but another difference (or somehow another aspect of the same difference?) that has tripped me up a few times is that "git checkout $rev ." only affects added and modified files (in $rev compared to HEAD), but "git reset $rev ." would also delete deleted files from the index. I suppose this is also a partial answer to your question in another message:
> What does it even mean, even when you are on an existing commit, to > hard reset partially? > > Perhaps you looking for "git checkout $tree -- $path"?
A more direct answer would be that I would expect "git reset --hard $rev -- ." to behave like "git reset --hard $rev", except that it wouldn't update HEAD. It seems to me that that would be similar to how "git reset $rev -- ." behaves like "git reset $rev", except that it doesn't update HEAD. But reset and checkout with and without paths still confuse me after years of using git, so I wouldn't be surprised if I'm not making any sense.