git中指针的含义
所有分支git都是新增指针来实现,比如新增dev分支,则相应增加一个dev的指针。
git另外还有个指针HEAD,来表示当前分支,比如当前是dev分支,HEAD就会指向dev。
git撤销修改
git分为工作区、暂存区,本地分支、远程分支。
每次修改文件对应的是工作区,add修改后的文件到暂存区,commit后就提交到了本地分支上,push后推送到远程分支。
场景一:丢弃本地(工作区)的修改
git checkout -- file
场景二:丢弃add到暂存区的修改(使用非常少)
-
第一步:撤销暂存区的修改
git reset HEAD file
-
第二步:丢弃工作区的修改
git checkout -- file
场景三:丢弃add到暂存区并commit到本地分支的修改(未推送到远程分支)
git reset HEAD~1
如果是撤销前3次的commit
git reset HEAD~3
git分支相关
新建并切换到新分支:
git branch -b branch_name
git switch -c branch_name
当前在dev做新功能,需要给master修复个bug
-
第一步:保存目前dev的现场
git stash
-
第二步:切换到master分支,新建bug_fix分支
git checkout master
git switch -c fix_bug
-
第三步:修改完后,切换到master分支,将bug_fix分支merge到master
git checkout master
git merge bug_fix
-
第四步:切回dev分支,将stash恢复
git checkout dev
git stash pop
上面的步骤完成后,dev其实没有master修复bug的代码,需要将此bug的提交merge到dev,git提供了一个cherry-pick
命令
git cherry-pick commit_id