工欲善其事,必先利其器。前言Git的本质git是一个版本控制工具,一切以版本控制为中心,版本即每一次commit,其实分支是指向commit的,HEAD也是指向某一次提交的,HEAD其实指向的就是当前分支的最近一次commit,可以看到master分支相对当前分支就落后了一个版本。 通过上面的理解我们简单举一个例子,git merge 命令,比如当前我们在master分支,将deploy分支合并到当前所在的分支master,如果当前分支master在创建deploy分支之后,没有进行新的提交,则直接就会将master的分支指向deploy分支所在的commit,这种现象叫Fast-forward,如果master中间提交过,则会将分支内容进行合并,并重新创建一个commit。我们使用reset命令的时候就会使HEAD和当前分支指向的版本移动到指定版本,git reset的三种模式,强烈建议阅读下面这篇文章:https://www.jianshu.com/p/c2ec5f06cf1a,通俗易懂。
代码写错分支了怎么办?
使用reset命令比如我的代码应该写在wzy分支上,但是我写到了xym这个分支,并且还提交了,怎么把代码移到wzy分支,并且撤回提交?
1、(xym)git reset HEAD^
2、(xym)git stash
3、切换到wzy
4、(wzy)git stash pop
5、(wzy)commit
这样所有的版本提交记录都不留痕迹,首先第一步会把差异放到工作区,然后git stash放到暂存栈,这个时候工作目录就是干净的,可以用git status看一下,然后切到wzy分支,git stash pop 从暂存栈中拿出来,之后再把代码提交。最后就是提交xym分支的代码,如果远程也推送了怎么办?就用下面的方法。
如何撤销远程的提交?
使用--force参数某次修改已经本地提交了,push到远程了,怎么撤销本地和远程的提交
首先还是版本回退,git reset HEAD^,然后,这样你之前改动的内容就会到工作目录中,你可以直接不提交工作目录的改动直接恢复成原来的样子,然后git push --force origin xym.强行让远程和你本地版本一致,你就会发现那次提交消失了.
git reset有三种模式,默认--mixed会把回滚的版本,和当前版本的差异保存到工作目录,--soft会把和当前版本的差异保存到暂存区,--hard会直接覆盖工作目录、暂存区、仓库,保证代码是一致的.HEAD是最近一次提交,HEAD^是最近的上一次.
结束语本期内容先到这里,后面会给大家介绍更多git实用技巧,感谢许愿猫校对内容!我们下期见。