Git小命令
最近对git版本回退的git reset, git revert, git checkout 有点迷糊不解,所以把当前的心得记录下来,方便以后学习。
git中默认存在两个指针分别是HEAD和MASTER指针,HEAD指针一直指向当前所在的位置,可以指向任意分支。MASTER指针指向最新的master分支代码。
git reset –hard [commit]
git reset –hard [commit] 是将当前本地的版本回退到指定的commit版本时期,参数hard的意思是缓存区和本地的都会强制回退到那个版本(加上hard才是真正到全部回退,建议如此)。如果commit之后的版本已经提交到远程分支了,那么reset之后如果想要向远程分支push代码,还是需要拉回远程的代码。所以这种回退只能回退本地的分支,若想要改变远程分支,则只能强制更新远程分支,git push origin 远程分支 -f(不建议使用)。
git reset 直接回退的是本地head指针,将本地head指针指向要回退的commit这里。所以在回退到commit版本之后,本地head指针中在此之后提交的commit就会丢失,强制push到远程之后,远程的记录也会丢失。若想要找到可以用命令git reflog(保留一段时间,不是永久的) 查询。
git revert [commit]
git revert [commit] 该命令是将指定的commit版本提交的内容撤销掉(删除),并且会产生一次新的提交记录。commit之后提交的内容不会进行修改,会被保留。
所以git revert的作用就是删除一个commit提交的内容,并生成一个新的commit,但是这个版本依然在提交记录中。而git reset是之后提交的commit不会存在提交记录中,之后提交的commit的内容也不会存在。
git checkout [commit]
git checkout 命令是用来切换分支的,如果使用git checkout [commit]命令,会把当前head指针切换到commit这个分支,相当于创作了一个新分支。git push到远程其他分支相当于跟其他远程分支进行合并(慎用)。
一般可以使用git checkout来查看以前提交某个commit的代码,最好只是查看,而不做任何修改。
后续
如果正在添加新功能,而这个时候却要修改以前的bug,并要修复打包部署。而正在写的代码不需要部署该怎么办呢?这个时候我们可以将正在写的尚未提交的代码压栈,然后修改bug,打包,提交,然后将代码出栈。压栈的代码不会被打包和提交进去。
git stash
git stash的作用是压栈,将正在写尚未提交到本地仓库的代码压栈,这个时候控制台会恢复到写代码之前的状态,就好像在上次提交之后,没有修改过代码一样。
git stash pop
git stash pop的作用是将压栈的代码出栈,压栈过几次就需要出栈几次,出栈的代码会跟当前控制台的代码进行合并。
git reflog
git reflog 的作用是查看所有的记录。
git branch -a
git branch -a 的作用是用来查看所有的分支,远程和本地的。
git checkout -b 分支名
git checkout -b 分支名 创建和切换到某分支
git checkout 分支名 文件
git checkout 分支名 文件,将某分支的某文件覆盖该分支的该文件,是直接覆盖,并会直接add
git reset 文件
git reset 文件, 将某修改的文件从add中踢出,则该文件的状态回到未add的状态。
git push origin 本地分支:远程分支
git push origin 本地分支:远程分支 将本地分支push到远程分支
git pull origin 远程分支:本地分支
git pull origin 远程分支:本地分支 将远程分支拉到本地分支。
git log
git log 查看提交记录
git merge 分支名
git merge 分支名, 将某分支合并到当前分支。