重写commit历史
将提交应用到最后一次commit中
git commit --amend -m "更新说明"
[ 有时候做了一个小的更改,不想单独弄出来一个commit,那就可以使用此命令,直接将当前这一次commit与上一次commit合并生成一个新的commit ]
整理本地的commit(未push的commit)
git rebase -i HEAD~3
[其中 -i
表示启用交互模式,~3
表示最近的三次commit ]
运行过上述命令之后会出现如下所示的内容,要保证第一个是pick,即采用这一次commit的内容,最终会把这三次的合并成一个commit,包含三次提交的所有内容,详细介绍请参照官网,或者阅读下方的说明,这里仅做一次命令的记录,
pick表示使用本次commit,squash或者s表示不使用本次提交
pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added cat-file
# Rebase 710f0f8..a5f4a0d onto 710f0f8
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
经过整理之后,保存并推出编辑模式,会弹出合并后的提示信息,再保存推出,就会将所有的commit合并成一个或多个commit,可以通过 git log
查看整理后的commit
注:如果这些commit已经push到服务器中,则强烈建议不要手贱,除非不怕被队友打死。
调试功能
git bisect start
[开始进行调试]
git bisect bad
[告诉git当前commit是bad,即出问题的commit]
git bisect good [commitid]
[在告诉git哪一个commit是good,即在哪一个commit上代码是正常的,然后git就会在当前的commit和good commit之间进行二分查找,git会根据二分查找法先切换到一个commit-a上,本地进行调试验证,并将验证结果告诉git,即git bisect good/bad
,告诉git当前的commit-a是好的或者坏的,标记完之后,git会继续根据二分查找法切换到另一个commit上,依次类推,最终git会找出第一次出现错误的commit,然后我们就可以定位出现问题的commit,并进行相应的错误检查]
git bisect reset
[调试完毕之后,在执行一遍此命令,会将你带回到正常的状态,否则会停留在一个奇怪的分支中]
GIT远程分支
git push origin [本地分支名称]:[远程分支名称]
[将本地的指定分支推送到远程仓库origin上作为远程分支,如果远程分支已存在则会自动合并,如果不存在,则会在远程创建一个远程分支]
git pull origin [远程分支]:[本地分支]
[将远程仓库中指定分支的内容拉取到本地的指定分支上]
git push origin --delete [远程分支]
[删除指定的远程分支]
git checkout --track origin/serverfix
[以指定的远程分支为基础在本地创建一个与远程分支同名的分支]
git checkout -b sf origin/serverfix
[以指定的远程分支为基础在本地创建一个分支(可以自己指定一个与远程分支不同的名称)]
git branch -u origin/serverfix
[将当前分支与指定分支建立追踪关系]