笔记:【git的使用】
- git rebase / git rebase -i,用于整理git历史,也可以修改commit message,常用的有:
- pick(选取,相当于完整保留commit)
- fixup(与它之前的commit合并,可以丢弃一些意义不大的小commit)
- squash(压缩commit meessage)
如果遇到冲突,在处理完冲突后需要git rebase --continue继续,最后用git push --force-with-lease推送远端。
-
git pull --rebase,用于多人协作,基于的分支超前,此时这个命令可以用来对齐,可能需要解决冲突,如果未commit的本地修改最好git stash之后再pop,如果已经commit则直接用这个指令然后解决冲突
-
git push --force-with-lease,推送时检查是否存在冲突,有些推送本身就需要 -f(改写了哈希的,如git rebase),但是-f会修改公开历史导致其他人的分支出问题,而--force-with-lease提供了一种如果远端分支没有修改则可以代表-f的功能,如果远端分支有不同则报错,然后用2的指令去处理即可
-
git stash push -m / pop,这组命令在当前修改内容未提交,但是需要切换分支或者用2的指令更新当前依赖的分支时非常有用,可以将除了untrack的被修改的文件全部存储起来,等其他工作完成后再pop还原,但要注意pop可能造成冲突,untrack的文件一般不需要处理,因为它们不属于任何分支
-
git fetch --all --prune用远端分支更新本地分支,可以删除一些远端不要的分支记录
-
git branch -f <branch_name>
/<HEAD^>/<HEAD~num>,类似于checkout,可以用来分离分支指针和HEAD,也可以用来修改分支指针的位置,主要在本地使用,坚决不能推送远端 -
git reflog用于查看分支修改历史,在reset,branch -f等指令时很有用,git reflog show <branch_name>可以只显示某个分支相关的修改历史
-
git reset,会重置本地分支的历史,用git reset HEAD^/
等类似的方式可以让一部分commit显得像是被删除了一样,但其实该commit的内容会在暂存区保留,并且可以通过git branch -f或者git reset到原来hash的方式恢复分支的状态。如果reset之后重新commit,则会产生新的一段分支,如果reset的commit没有别的分支指向则会悬空。 -
git reset ORIG_HEAD,在调整了分支指针后短时间内使用该指令可以直接回到原来的状态,但是调整分支指针和该指令直接一般不能使用过其他指令
-
git revert,与git reset类似,但不会真的删除历史,而是新增一个commit,例如git revert HEAD^实际上会把当前HEAD前一个的commit作为一个新commit提交。
- 这种方式适合在多人协同时用于回退到某一个没有BUG的版本,例如在开发feature时,我的某个提交造成了bug,但暂时无法修改,为了不阻碍同事开发,可以在feature上revert一个提交,回到没有BUG的版本,这样仅仅在历史中多了一次revert记录,但不影响代码开发。
- 如果遇到冲突需要git add和git revert --continue继续提交最后推到远端。
- 此外-m 1/2用于在revert的commit有多个父节点时使用。
- 另外还可以revert一次revert以恢复原样,第二次revert的是第一次revert产生的提交。
浙公网安备 33010602011771号