3-具体学习git--reset回到过去的版本(commit间穿梭),checkout单个文件穿梭

git log --oneline 命令可以在一块儿显示做过的改动。

我在change 2时忘了一条,想在change 1后再添加一个语句或一个操作,然后这个状态再提交仍作为change 2.将这个staged改动作为上一个commit中。

将1.py复制了一份重命名为2.py,然后git add 2.py,我如果直接用git commit -m “备注”就不行,可以用 git commit --amend --no-edit

虽然change 2的注释没变,但是前面的指针地址变了,可以看出来。


 从staged状态返回到modified状态:git reset 1.py

--

-----------------------------

 另一种情况是我改变代码文档后add 到了staged状态,也commit成unmodified状态了,那我怎样返回到add前改变代码的状态呢?用指针移动啊。

首先看看有几个版本,git log --oneline,发现有三个:

可以用 git reset --hard HEAD来重新回到add之前,这个HEAD就代表了07e8eb5这个指针,回到了初始的commit状态,

然后查看状态:

发现没有任何回应,说明是commit状态(即commit后的unmodified状态)

如果我想回到上一个commit状态,我用 git reset  --hard HEAD^  或git reset --hard HEAD~1 或用git reset --hard 7efe439 ,最后一个是id号码。

如果我现在想回到未来,但是看不到change 2 的id号了,怎么办呢?用 git reflog命令找到所有的id号,然后通过id号回到以前有过的将来。

也可以把指针复制过来,


单个文件回到从前:

git checkout 7efe439 -- 1.py                       7efe439是id号,1.py是要操作的文档。

 

发现1.py内容变了。

但是2.py还是之前的内容。

checkout还可以在branch分支之间切换。

我现在修改1.py:

执行:

这时发现1.py的change 2还存在,并没有被覆盖,我们仍然可以回到那个过去。不过现在仍处在:

-----------------------------------------------------

reset和checkout的区别:

1.reset是整个目录回到从前的commit,创造另外一个未来,checkout是单个文件回到从前的commit,回到以前的未来。

2.reset回到从前某个时间点,这个时间点将来直到现在时间的变化不会显示在log 中,而checkout仍然显示在log中。

原文地址:https://www.cnblogs.com/zhubinglong/p/7116849.html