用了git就会发现,再也不想用svn了。Note:在执行push操作前,所有的修改都发生在本地,可以使用reset随便回滚本地的提交。但要注意:本地修改一旦回滚,无法找回。在push后,想要回滚到指定的版本,便需要使用revert,这样的代价就是:你的回滚记录被记录在了log中,所有人都可以看见。使用reset回退本质上是commit操作的回退。Git工作流可以简化为三个部分:Working Directory、index、HEAD。后两部分对应的git命令便是add和commit。如果使用的是Sourcetree工具,那么这三部分就更直观了。该命令的具体功能是移动HEAD,即移动分支的指针。将当前的HEAD重新指向之前的版本,本地工作环境也会跟着切换。适用场景:本地已经commit,但尚未push到远端仓库的回滚操作。该命令提供了三个属性:分别是soft、mixed、和hard。soft撤销上一次的commit命令,返回到HEAD前的index状态。mixed撤销了上一次的git add和git commit命令,将index的修改回滚到Working Directory。hard撤销了最后git add 和 git commit 命令以及工作目录中的所有修改。所以reset重写的顺序如下:移动 HEAD 指向的分支(如果是soft,则到此停止)。使索引看起来像 HEAD(如果是mixed,则到此停止)。使工作目录看起来像索引。Example当执行pull命令发生冲突时时,本地代码需要做merge操作。但本地代码只是临时调试修改,并不需要保存提交。执行如下命令,便会清空本地的修改,hard相当于一个版本的指针,origin/master可以替换为具体的版本号git reset –hard origin/mastergit reset –hard version-numbergit reset –hard HEAD获取版本号可以通过git log直接查看。更多详细介绍,可以查看: 高级合并及 重置揭密checkoutstash储藏将==工作区==的修改进行存储,使本地重新成为一个干净的环境,同时方便在之后应用这些改动。可以用于存储==已被索引的文件==、或者==未跟踪的文件==。执行git stash -a 来暂存所有改动的文件。下面是执行的流程:git stash 储藏修改git stash list 查看储藏的列表将储藏重新应用到当前分支:git statsh apply stash@{1}或者git stash pop stash@{1}。后者会在应用暂存之后从堆栈上删除git stash drop stash@{1} 移除暂存使用clean清空用于从==工作区==移除==未被追踪的文件==,执行git clean -d -f来移除所有未被追踪的文件或目录。git clean -d -n 可以用来做一次删除前的演示git clean -d -i 用于交互式的删除文件使用revert我们工作区看到的内容,是所有版本修改合并的结果。如果觉得某个版本的提交有问题,使用revert便可以直接撤销这个版本的修改。本质上通过提交新的版本来撤销修改。–> (modify version 1) –> (modify version 2) –> (modify version3)执行git revert 版本号仅仅是撤销这个版本的修改。如果你想将版本回滚到version 1,你需要执行2次revert操作。且每次执行revert都会有一个新的版本生成。Revert a merge回滚merge提交跟普通的提交是有区别的。我们一般都是在分支上开发,然后将修改合并到主分支上。所以merge的那个提交版本,存在两个parent分支。所以,执行git revert MERGE_HASH是不能正常工作的。原因在于这个提交存在多个parent,它需要有额外的信息来决定哪一个分支作为回滚的主线。参数-m就是用来干这个的。git revert 0cce3a0837da60fb8ef458d98f81feaa97397363error: Commit 603c1333339bc9b5ad4d8b864e948d4bd950bf05 is a merge but no -m option was given.fatal: 还原失败Revert the revert听着这个标题,就感觉很有意思!参考文档:How to revert a merge commit in Git
Git清空操作
December 20, 2018 · 1 min · jiezi