(copying in Konstantin) ----- Original Message ----- From: vvs To: Git for human beings Cc: vvs...@gmail.com ; philipoak...@iee.org Sent: Saturday, April 22, 2017 3:18 PM Subject: Re: [git-users] Undocumented reset behavior
On Saturday, April 22, 2017 at 4:50:41 PM UTC+3, Philip Oakley wrote: If i understood the initial statement your have two different seqences of commands and their interaction isn't as expected. but I couldn't decide what the specific sequence were. Would you ab able to show a short test case, even just use a comment to indcate initial state, and then the different commands and what you see as different. Yes, you are right. Here is a simple test case: mkdir test cd test git init touch xxx git add xxx git commit -m xxx touch yyy git add yyy git commit -m yyy git reset HEAD^ git reset @{1} git reset --hard This is different because yyy will be touched: git reset HEAD^ git reset --hard @{1} I believe these two cases should be no different at all. Anyway, that's what the docs say, at least as I understand it. -- I tried it locally but didn't get what I think you expected. I am on git version 2.9.0.windows.1.323.g0305acf (~the last which supports my harware). What I have / see is [first, I slightly beef up the test case and the investigation/status commands second, I run the two sets, but don't see the time stamp issue, which is commonly the issue with make files vs git (one thinks time stamps are important the other doesn't) :- mkdir test cd test git init touch xxx git add xxx git commit -m xxx touch yyy git add yyy git commit -m yyy git status sleep 2 git reset HEAD^ # move the branch back one commit implies --mixed. # Resets the index but not the working tree # (i.e., the changed files are preserved but not marked for commit) git status git reflog stat yyy # Option A git reset @{1} # Resets the index to yyy but no change to the working tree stat yyy git reset --hard # Resets the index and working tree. but the yyy file is already up to date. stat yyy # Option B git reset --hard @{1} # Resets the index and working tree. # Any changes to tracked files in the working tree since <commit> are discarded. # brand new yyy file (in the commit) - overwrite whatever was there. stat yyy # Noticed difference (by vvs009) is: 'make' detetcting a timestamp difference (in yyy?) that was not expected. ? == A. Philip@PhilipOakley MINGW32 /usr/src $ cd test Philip@PhilipOakley MINGW32 /usr/src/test $ git init Initialized empty Git repository in C:/git-sdk-32/usr/src/test/.git/ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ touch xxx Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git add xxx Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git commit -m xxx [master (root-commit) 83a861e] xxx 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 xxx Philip@PhilipOakley MINGW32 /usr/src/test (master) $ touch yyy Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git add yyy Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git commit -m yyy [master 0db613e] yyy 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 yyy Philip@PhilipOakley MINGW32 /usr/src/test (master) $ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git status On branch master nothing to commit, working tree clean Philip@PhilipOakley MINGW32 /usr/src/test (master) $ sleep 2 Philip@PhilipOakley MINGW32 /usr/src/test (master) $ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git reset HEAD^ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ # move the branch back one commit implies --mixed. Philip@PhilipOakley MINGW32 /usr/src/test (master) $ # Resets the index but not the working tree Philip@PhilipOakley MINGW32 /usr/src/test (master) $ # (i.e., the changed files are preserved but not marked for commit) Philip@PhilipOakley MINGW32 /usr/src/test (master) $ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) yyy nothing added to commit but untracked files present (use "git add" to track) Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git reflog 83a861e HEAD@{0}: reset: moving to HEAD^ 0db613e HEAD@{1}: commit: yyy 83a861e HEAD@{2}: commit (initial): xxx Philip@PhilipOakley MINGW32 /usr/src/test (master) $ stat yyy File: 'yyy' Size: 0 Blocks: 0 IO Block: 65536 regular empty file Device: 94555d4eh/2488622414d Inode: 63331869760117686 Links: 1 Access: (0644/-rw-r--r--) Uid: (197613/ Philip) Gid: (197121/ UNKNOWN) Access: 2017-04-22 16:43:47.562500000 +0100 Modify: 2017-04-22 16:43:47.562500000 +0100 Change: 2017-04-22 16:43:47.562500000 +0100 Birth: 2017-04-22 16:43:47.562500000 +0100 Philip@PhilipOakley MINGW32 /usr/src/test (master) $ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ # Option A Philip@PhilipOakley MINGW32 /usr/src/test (master) $ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git reset @{1} Philip@PhilipOakley MINGW32 /usr/src/test (master) $ # Resets the index to xxx but no change to the working tree Philip@PhilipOakley MINGW32 /usr/src/test (master) $ stat yyy File: 'yyy' Size: 0 Blocks: 0 IO Block: 65536 regular empty file Device: 94555d4eh/2488622414d Inode: 63331869760117686 Links: 1 Access: (0644/-rw-r--r--) Uid: (197613/ Philip) Gid: (197121/ UNKNOWN) Access: 2017-04-22 16:43:47.562500000 +0100 Modify: 2017-04-22 16:43:47.562500000 +0100 Change: 2017-04-22 16:43:47.562500000 +0100 Birth: 2017-04-22 16:43:47.562500000 +0100 Philip@PhilipOakley MINGW32 /usr/src/test (master) $ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git reset --hard HEAD is now at 0db613e yyy Philip@PhilipOakley MINGW32 /usr/src/test (master) $ # Resets the index and working tree. but the yyy file is already up to date. Philip@PhilipOakley MINGW32 /usr/src/test (master) $ stat yyy File: 'yyy' Size: 0 Blocks: 0 IO Block: 65536 regular empty file Device: 94555d4eh/2488622414d Inode: 63331869760117686 Links: 1 Access: (0644/-rw-r--r--) Uid: (197613/ Philip) Gid: (197121/ UNKNOWN) Access: 2017-04-22 16:43:47.562500000 +0100 Modify: 2017-04-22 16:43:47.562500000 +0100 Change: 2017-04-22 16:43:47.562500000 +0100 Birth: 2017-04-22 16:43:47.562500000 +0100 Philip@PhilipOakley MINGW32 /usr/src/test (master) $ ==== B. Philip@PhilipOakley MINGW32 /usr/src $ cd test Philip@PhilipOakley MINGW32 /usr/src/test $ git init Initialized empty Git repository in C:/git-sdk-32/usr/src/test/.git/ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ touch xxx Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git add xxx Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git commit -m xxx [master (root-commit) 00e124e] xxx 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 xxx Philip@PhilipOakley MINGW32 /usr/src/test (master) $ touch yyy Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git add yyy Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git commit -m yyy [master fe84b18] yyy 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 yyy Philip@PhilipOakley MINGW32 /usr/src/test (master) $ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git status On branch master nothing to commit, working tree clean Philip@PhilipOakley MINGW32 /usr/src/test (master) $ sleep 2 Philip@PhilipOakley MINGW32 /usr/src/test (master) $ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git reset HEAD^ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ # move the branch back one commit implies --mixed. Philip@PhilipOakley MINGW32 /usr/src/test (master) $ # Resets the index but not the working tree Philip@PhilipOakley MINGW32 /usr/src/test (master) $ # (i.e., the changed files are preserved but not marked for commit) Philip@PhilipOakley MINGW32 /usr/src/test (master) $ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) yyy nothing added to commit but untracked files present (use "git add" to track) Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git reflog 00e124e HEAD@{0}: reset: moving to HEAD^ fe84b18 HEAD@{1}: commit: yyy 00e124e HEAD@{2}: commit (initial): xxx Philip@PhilipOakley MINGW32 /usr/src/test (master) $ stat yyy File: 'yyy' Size: 0 Blocks: 0 IO Block: 65536 regular empty file Device: 94555d4eh/2488622414d Inode: 17451448556419482 Links: 1 Access: (0644/-rw-r--r--) Uid: (197613/ Philip) Gid: (197121/ UNKNOWN) Access: 2017-04-22 16:47:19.437500000 +0100 Modify: 2017-04-22 16:47:19.437500000 +0100 Change: 2017-04-22 16:47:19.437500000 +0100 Birth: 2017-04-22 16:47:19.437500000 +0100 Philip@PhilipOakley MINGW32 /usr/src/test (master) $ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ # Option B Philip@PhilipOakley MINGW32 /usr/src/test (master) $ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ git reset --hard @{1} HEAD is now at fe84b18 yyy Philip@PhilipOakley MINGW32 /usr/src/test (master) $ # Resets the index and working tree. Philip@PhilipOakley MINGW32 /usr/src/test (master) $ # Any changes to tracked files in the working tree since <commit> are discarded. Philip@PhilipOakley MINGW32 /usr/src/test (master) $ # brand new yyy file (in the commit) - overwrite whatever was there. Philip@PhilipOakley MINGW32 /usr/src/test (master) $ stat yyy File: 'yyy' Size: 0 Blocks: 0 IO Block: 65536 regular empty file Device: 94555d4eh/2488622414d Inode: 17732923533130138 Links: 1 Access: (0644/-rw-r--r--) Uid: (197613/ Philip) Gid: (197121/ UNKNOWN) Access: 2017-04-22 16:47:29.640625000 +0100 Modify: 2017-04-22 16:47:29.640625000 +0100 Change: 2017-04-22 16:47:29.640625000 +0100 Birth: 2017-04-22 16:47:19.437500000 +0100 Philip@PhilipOakley MINGW32 /usr/src/test (master) $ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ Philip@PhilipOakley MINGW32 /usr/src/test (master) $ # Noticed difference is: 'make' detetcting a timestamp difference (in yyy?) that was not expected. Philip@PhilipOakley MINGW32 /usr/src/test (master) $ === So in both these cases, the test simplification appears to result in identical output (unless I missed something - could easily happen) -- Philip -- You received this message because you are subscribed to the Google Groups "Git for human beings" group. To unsubscribe from this group and stop receiving emails from it, send an email to git-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.