add
–>暂存区–>commit
–>本地仓库区–>push
–>远程仓库区fetch
–>使用refs\remotes
下对应分支文件记录远程分支末端commit_id
和本地仓库区 –>merge
–>工作区pull
–>使用refs\remotes下对应分支文件记录远程分支末端commit_id 、 本地仓库区 和 工作区干货来咯!!!
现有如下提交记录:
$ git log
commit 119f493775ac878c24c37bebda316aa73a355003 (HEAD -> master)
Author: bccoco
Date: Tue Sep 15 23:13:37 2020 +0800
第四次提交
commit 8e226045a8c501950522225c9a01337688e03e99
Author: bccoco
Date: Tue Sep 15 23:13:16 2020 +0800
第三次提交
commit a2dd0e3dd5721a8e0848f98ef5a9d1be6688c0db
Author: bccoco
Date: Tue Sep 15 23:12:51 2020 +0800
第二次提交
commit 6d77ae0cd6a0e934722a1d97546f9b214bd13198
Author: bccoco
Date: Tue Sep 15 23:11:38 2020 +0800
第一次提交
说明:
提交顺序为:6d77ae
--> a2dd0e
--> 8e2260
--> 119f49
git log
或者git reflog
commit id: 119f49
这一次提交,即最后一次提交;git reset
commit id: 8e2260
Workspace
git add
and git commit -m
或git commit -am
将最新修改后的代码commit$ git log
commit 323fc9b5d1d43f0b48a6bfd88b00b4ab53676ad7 (HEAD -> master)
Author: bccoco
Date: Tue Sep 15 23:39:37 2020 +0800
第五次提交
commit 8e226045a8c501950522225c9a01337688e03e99
Author: bccoco
Date: Tue Sep 15 23:13:16 2020 +0800
第三次提交
commit a2dd0e3dd5721a8e0848f98ef5a9d1be6688c0db
Author: bccoco
Date: Tue Sep 15 23:12:51 2020 +0800
第二次提交
commit 6d77ae0cd6a0e934722a1d97546f9b214bd13198
Author: bccoco
Date: Tue Sep 15 23:11:38 2020 +0800
第一次提交
整个流程:
git log
git reset 8e2260
修改代码
git commit -am '第五次提交'
接下来对git reset进行一下总结:
在进行总结时,先假设有这样一个提交链:
commit_id1
--> commit_id2
--> commit_id3
--> commit_id4
git reset commit_id1:
reset是将HEAD
重新定位到commit_id1
上,对于commit_id2
、commit_id3
和 commit_id4
和本地当前的修改,对于不同的参数,会有不同的处理,具体如下:
reset命令有三种处理模式:
回滚commit_id前的所有提交,不删除修改:git reset --soft commit_id
重设head,不动index,所以效果是commit_id之后的commit修改全部在index中,将id3 和 id4的修改放到index区(暂存区),也就是add后文件存放的区域,本地当前的修改保留
回滚commit_id前的所有提交,不删除修改:git reset commit_id
等同于 git reset --mixed commit_id
,与 下述的 git reset --hard commit_id
效果不同
重设head 和 index,不重设work tree,效果就是commit_id之前的修改,全部在work tree中,为还未add的状态,将id3 和 id4 的所有修改放到本地工作区中,本地当前的修改保留
回滚commit_id前的所有提交,将修改全部删除:git reset --hard commit_id
重设head、index、work tree,也就是说将当前项目的状态恢复到commit_id的状态,其余的全部删除(包含commit_id后的提交和本地还未提交的修改)慎用!!
如果想要只操作修改中间的一个commit,不对其他的commit产生影响; 也就是类似于我们只修改commit_id2,而对commit_id3 和 commit_id4无影响,该怎么处理呢? 在项目开发中,突然发现在前几次的提交中,有一次提交中包含一个bug; 当然我们可以进行一个新的修改,然后再提交一次; 但是历史看着不美观,我们可以直接重做有bug的commit。
为什么不直接去再添加一个commit呢? git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。
比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西;
在revert命令中常用的就两个:
重做commit_id的提交信息,生成为一个新的new_commit_id:git revert -e commit_id
重做commit_id的提交:git revert -n commit_id
将commit_id中修改,放到index区,我们可以对他重新做修改并重新提交
git checkout回滚指定文件的修改
命令:git checkout --
作用:将file_name的本地工作区的修改全部撤销,
有两种情况:
总之,就是让指定的文件回滚到最近的一次git add 或者 git commit时的状态!
git checkout的其他作用:
git checkout
切换分支git checkout -b
创建分支等操作本文是自己对git回滚操作的理解并且参考网上的文章而写,如有雷同,还请见谅