关联本地分支与远程分支

git branch --set-upstream-to=origin/<remote_branch>

追加到上一次提交

git commit --amend [-m message]

删除分支

# 本地
git branch -D <local_branch>

# 远程
git push origin --delete <remote_brach>

重命名分支

重命名本地分支

git branch -m <old_branch> <new_branch>

重命名远程分支需要先删除远程分支,再将本地分支推送到远程。

修改历史commit

假如有A(HEAD)-B-C-D-E5个commit,需要修改C和D的commit信息

# rebase HEAD之前的5次提交
git rebase -i HEAD~5

此时会进入交互界面,将需要修改的commit之前的pick改为edit,然后wq保存。

pick b4ba123435 A
pick 0ae807b99c B
edit 70890e2e86 C
edit aa0778f109 D
pick 630cc16edb E

循环以下操作:修改代码或者修改commit信息,然后输入:

# 以当前代码重新覆盖本次提交
git commit --amend

# 继续rebase,如果有冲突则解决冲突
git rebase --continue

rebase结束后,会修改所有rebase的commit id,如果想要push到远程仓库需要强制push

git push origin master -f

交互式变基

git rebase -i(交互式变基)可以让你在变基(rebase)过程中,精细地控制每个提交的修改:

  • 重排序提交
  • 合并提交
  • 编辑提交信息
  • 删除提交

用法:

# 指定范围为:当前提交的前n个提交。
git rebase -i HEAD~n

# 指定范围为:commit-id到当前的所有提交
git rebase -i <commit-id>^

# 指定范围为:(commit-id-begin到commit-id-end]之间的所有提交
git rebase -i <commit-id-begin>^..<commit-id-end>

# 变基当前分支与另一个分支之间的差异
git rebase -i <other-branch>

常用命令:

  • pick:保留该提交(默认命令)。
  • reword:保留该提交,但是你可以修改提交信息。
  • edit:保留该提交,但在该提交时暂停,你可以修改代码或提交。
  • squash:将该提交与前一个提交合并,并且保留这两个提交的内容。Git 会提示你编辑合并后的提交信息。
  • fixup:将该提交与前一个提交合并,但不保留该提交的提交信息,直接使用前一个提交的信息。
  • drop:删除该提交。

忽略已被track的文件

.gitignore只能作用于没有被track的文件,也就是工作区的文件。 对于add,commit后的文件是没有作用的。 需要先把本地的缓存删除,再去提交,就可以实现忽略整个仓库文件。

git rm -r --cached .
git add .
git commit -m 'update .gitignore'
git push