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

  • 相关阅读:
    (4.3)基于机器学习(分类)的酒店评论倾向性分析
    (4.2)基于LingPipe的文本基本极性分析【demo】
    (4.1)LingPipe在Eclipse中的运行
    微信获取openid
    微信token
    js跳转整理(简记)
    阅读有感
    normalize.css v2.1.2 翻译
    来,让我们谈一谈 Normalize.css
    jquery ajax事件执行顺序
  • 原文地址:https://www.cnblogs.com/zhubinglong/p/7116849.html
Copyright © 2020-2023  润新知