zoukankan      html  css  js  c++  java
  • 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中。

  • 相关阅读:
    Android -- 自定义View小Demo,动态画圆(一)
    Android -- 自定义View小Demo,绘制四位数随机码(一)
    Android设计模式---观察者模式小demo(一)
    Android -- 自定义View小Demo,绘制钟表时间(一)
    Android -- 自定义View小Demo,关于Rect绘制Android机器人(一)
    Android -- 自定义View小Demo,关于Path类的使用(一)
    Android -- 自定义View小Demo(一)
    Android -- 自定义View(一)
    自定义Scrollview--实现仿淘宝Toolbar透明度渐变效果
    究竟什么是技术——非科班程序员两年的内心挣扎
  • 原文地址:https://www.cnblogs.com/zhubinglong/p/7116849.html
Copyright © 2011-2022 走看看