2019-07-11
linux
00
请注意,本文编写于 1722 天前,最后修改于 1722 天前,其中某些信息可能已经过时。

目录

1. 场景1
2.场景2
3.git reset
4.场景3

1. 场景1

新建一个目录,目录下有个文件xxx.txt。当前的目录的版本为v1。 此时,只有工作目录有内容

再使用git add 将文件提交到索引之中。 此时,工作目录和index都有内容

再使用git commit 它会取得索引中的内容并将它保存为一个永久的快照,然后创建一个指向该快照的提交对象 此时,HEAD指针指向该版本的版本号,工作目录、index和仓库均有内容,使用git status命令查看的状态是无提交。

2.场景2

修改xxx.txt文件后,工作区的原来v1版本的xxx.txt发生变化,此时称该目录的版本为v2 此时运行git status,会看到文件显示在 “Changes not staged for commit,” 因为该文件在索引与工作目录之间存在不同。

再使用git add 将文件提交到索引之中。 此时,工作目录和索引(index)相同,但是索引中的文件和HEAD指向的快照中的版本v1不一致

运行git status,会看到 “Changes to be committed”。 最后使用git commit,此时HEAD指针脱离v1版本号转而指向v2版本的版本号。工作目录、index和仓库均有内容,使用git status命令查看的状态是无提交。

3.git reset

  1. 移动 HEAD 移动 HEAD 分支的指向 (若指定了 --soft,则到此停止),撤销了上一次 git commit 命令 将HEAD指针指向上一次commit的版本号,git reset --soft HEAD~

  2. 更新索引区(--mixed) git reset HEAD~ 将索引中的版本回退到HEAD~的版本

  3. 更新工作区 git reset --hard HEAD~ 撤销了最后的提交、git add 和 git commit 命令以及工作目录中的所有工作。

git reflog 查看HEAD指针的移动

git reset指定一个路径 不移动HEAD,只是将文件重置为指定的版本

git reset 也可以将文件从暂存去撤出,取消指定的暂存文件 git rm --cached file 将文件从暂存转换为未暂存,从版本仓库中删除,但不删除工作区文件,文件状态转换为未被追踪状态

git mv old_name new_name 将被追踪的文件改名,并且直接放到index中

git checkout:列出可以从索引中检出的文件,当检测到工作区和索引中的文件不一样的文件时,可以使用该命令列出 git checkout file:检测指定的文件 git checkout commit file 从某次的commit中检出

git log 列出当前分支的所有commit,可能不是所有的commit

4.场景3

文件提交了3个版本,v1、v2、v3

如果要撤销v3的commit git reset --soft HEAD~

如果要撤销v3的add操作 git reset HEAD

如果要换原v3的修改操作 git reset --hard HEAD 也可以使用第三步,同事完成前面两部的操作

本文作者:mykernel

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!