-
本地还没有提交到暂存区,想放弃工作区的修改。
git checkout . 本地所有的修改,没有提交的,都返回到原来的状态 -
本地已经提交到了暂存区,想放弃暂存区里的提交。
git reset --hard HASH #返回到某个节点(通常是上上个节点),不保留修改。
git reset --soft HASH #返回到某个节点(通常是上上个节点),保留修改
这里reset指令只影响被track过的文件,如果要影响没有被track过的文件,使用clean。
- 查看使用 git clean会有哪些文件被删除
git clean -n - 删除工作区中所有没有track过的文件
git clean -f
使用这个指令,需要在父目录而不是子目录进行。
场景1:错误提交已经推送到remote
如果想要只操作修改中间的一个commit,不对其他的commit产生影响; 也就是类似于我们只修改commit_id2,而对commit_id3 和 commit_id4无影响,该怎么处理呢? 在项目开发中,突然发现在前几次的提交中,有一次提交中包含一个bug; 当然我们可以进行一个新的修改,然后再提交一次; 但是历史看着不美观,我们可以直接重做有bug的commit。
为什么不直接去再添加一个commit呢? git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。
比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西;
在revert命令中常用的就两个:
git revert -e <commit_id>:重做指定commit的提交信息
git revert -n <commit_id>:重做执行commit的代码修改
git revert -e
重做commit_id的提交信息,生成为一个新的new_commit_id:git revert -e commit_id
git revert -n
重做commit_id的提交:git revert -n commit_id
将commit_id中修改,放到index区,我们可以对他重新做修改并重新提交
网友评论