官方文档参考: https://git-scm.com/book/zh/v2

基础回顾

参考: https://www.ruanyifeng.com/blog/2014/06/git_remote.html
git常用命令 - 图1

git clone

从远程主机克隆一个版本库,该命令会在本地主机生成一个目录,与远程主机的版本库同名

  • 若要指定不同的目录名:

$ git clone <版本库的网址> <本地目录名>

  • 克隆版本库的时候,所使用的远程主机自动被Git命名为origin, 如果想用其他的主机名,需用git clone命令的-o指定:

$ git clone -o <主机名> <版本库的网址>

git remote

git要求每个远程主机都指定一个主机名, 此命令会列出所有主机名

  • 查看主机名以及网址:

$ git remote -v

  • 查看该主机的详细信息。

$ git remote show <主机名>

  • 添加远程主机。

$ git remote add <主机名> <网址>

  • 删除远程主机。

$ git remote rm <主机名>

  • 远程主机的改名。

$ git remote rename <原主机名> <新主机名>

git fetch

  • 将远程主机的更新取回本地:

$ git fetch <远程主机名>

  • 默认情况下取回所有分支的更新, 可以指定特定分支:

$ git fetch <远程主机名> <分支名>

  • 查看远端分支

$ git branch -r

  • 查看所有分支

$ git branch -a

  • 创建新分支

$ git checkout -b <新分支名> <原分支名>

  • 在本地分支合并远程分支

$ git merge <远程分支>
# 或者
$ git rebase <远程分支>

git pull

  • 拉取远程分支的更新, 再与本地分支合并

$ git pull <远程主机名> <远程分支名>:<本地分支名>
(如果远程分支是与当前分支合并,则冒号后面的部分可以省略)

  • 在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系, Git也允许手动建立追踪关系。

$ git branch —set-upstream <本地分支> <远程分支>

如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名:
$ git pull <本地分支>

如果当前分支只有一个追踪分支,连远程主机名都可以省略:
$ git pull

git push

  • 将本地分支的更新推送到远程主机

$ git push <远程主机名> <本地分支名>:<远程分支名>
(注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>)
如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建:
$ git push <远程主机名> <本地分支名>

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
$ git push origin :master
# 等同于
$ git push origin —delete master

如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
$ git push <远程主机名>


如果当前分支只有一个追踪分支,那么主机名都可以省略。
$ git push

其他

设置提交时换行符为unix格式

git config —global core.autocrlf input

设置自己的帐号

git config —global user.name “自己的花名”
git config —global user.email “公司邮箱”

代码回退到指定版本

1.查看提交记录
$ git log
#或者
$ git log —pretty=oneline

查看以往提交历史(包括 撤销回退 记录)
$ git reflog

2.回退上一次提交
$ git revert HEAD

回退上N次提交
$ git revert HEAD~N
image.png

3.推送远端
$ git push -f

补充 : 直接回退到指定版本
$ git log 找到指定版本的commit_id
$ git reset —hard
$ git push -f

查看分支

$ git branch 查看本地分支
$ git branch -r 查看远程分支
$ git branch -a 查看全部分支

删除分支

$ git branch -d xxx 删除本地分支
$ git push origin —delete xxx 删除远程分支

恢复已删分支

1.通过log找commitId
$ git log -g
如果commit的内容过多的话,我们可以进行过滤查找:
git log -g —author=”xx@qq.com” // 根据用户名过滤,模糊匹配
git log -g —grep “xx” // 根据commit时候的提交信息查找,模糊匹配

2.用这个commit创建一个新的分支
$ git branch 【new_branch名】 commitId

合并多次push记录

参考: https://blog.csdn.net/badmoonc/article/details/83241511
此处直接贴上原文

  1. 有时候,我们用git提交代码时,因为我们的疏忽,会导致同一个问题,修改多次,因为反复提交多次,最终稳定下来,我们想把git上这些不成熟的提交记录合成一个终极记录。例如:
  2. git上依次有如下提交(按提交时间从新到旧):
  3. 提交记录k
  4. 提交记录m
  5. 提交记录n4
  6. 提交记录n3
  7. 提交记录n2
  8. 提交记录n1
  9. 提交记录p
  10. 提交记录q
  11. 现在,我们想将提交记录n1n4合并成一个提交记录n,怎么办呢?
  12. 首先我们输入:
  13. git log
  14. 查看提交记录,得到包含n1n4的位置,然后输入:
  15. git rebase -i HEAD~6
  16. 注意这里的数字“6”,是从新提交记录到需要合并的记录的条数。从kn1正好是6条记录,实际的数字请根据你要合并的记录到最新的提交记录的个数来计算。这个时候我们自动打开一个文本文件,注意这个文本文件中从上到下显示的提交顺序是从旧到新。
  17. 我们将需要合并的记录前面的pick改成squash,然后保存退出。
  18. 如果合并成功会打开另外一个文件文件,在这里我们输入这次合并时的提交记录信息。
  19. 如果合并有冲突,在解决冲突后需要输入:
  20. git add .
  21. git rebase --continue
  22. 如果不想合并了,放弃合并的指令是:
  23. git rebase --abort
  24. 接着我们输入:
  25. git push -f
  26. 这条指令将本地仓库合并记录推送支远端仓库,如果没有-f的话,系统会提示你,当前记录不是最新的,无法提交,-fforce的意思,强制提交。

重新编辑commit注释信息

步骤:

  1. 通过git log先确认要编辑前n次的commit注释信息
  2. git rebase -i HEAD~n
  3. 然后进入vim编辑器