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中。

  • 相关阅读:
    directshow filter中添加属性页
    (转)3G卡片在开发板上的详细解决方法
    Mean Shift 算法流程
    FloodFill(漫水填充)算法
    Camshift算法(1)
    jQuery click实现toggle(fn,fn)
    每天学点MVC 【Controller返回类型总结】
    jQuery empty在IE下不支持
    Meta标签详解【转载】
    JS格式化
  • 原文地址:https://www.cnblogs.com/zhubinglong/p/7116849.html
Copyright © 2011-2022 走看看