1、创建版本库

  1. git init

2、添加到暂存区

  1. git add <file>
  2. param:
  3. -f # 强制添加添加(无论是否被忽略)
  4. eg.
  5. git add Readme.txt

3、添加文件到Git仓库

  1. git commit -m "提交注释"
  2. eg.
  3. git commit -m "remove readme-en.txt"

4、查看仓库当前的状态

  1. git status

5、对比文件

  1. git diff <file>
  2. eg.
  3. git diff Readme.txt

6、查看git提交日志

  1. git log
  2. eg.
  3. git log --pretty=oneline
  4. # --pretty=oneline 输出为一行
  5. git log --graph --pretty=oneline --abbrev-commit
  6. # --graph 查看分支合并图

7、版本回退

  1. git reset --hard HEAD^
  2. ^代表回退到上一个版本
  3. ^^代表两个 以此类推
  4. 指定版本
  5. git reset --hard <version>
  6. eg.
  7. git reset --hard 1094a

8、查看命令执行记录

  1. git reflog

9、用版本库里的版本替换工作区的版本

  1. git checkout -- <file>
  2. eg.
  3. git checkout -- Readme.txt

10、撤销暂存区的修改,重新放回工作区

  1. git reset HEAD <file>
  2. eg.
  3. git reset HEAD Readme.txt

11、删除

  1. git rm <file>
  2. eg.
  3. git rm Readme-En.txt

12、创建SSH Key

  1. ssh-keygen -t rsa -C "youremail@example.com"
  2. eg.
  3. ssh-keygen -t rsa -C "1119772098@qq..com"
  4. # path:用户主目录/.ssh/
  5. # id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

13、关联一个远程库

  1. git remote add origin <git ssh addr>
  2. eg.
  3. git remote add origin git@gitee.com:aninn/pdd.git
  4. # 删除已关联的名为origin的远程库
  5. git remote rm origin

14、把本地库的内容推送到远程

  1. git push origin <分支>
  2. eg.
  3. git push origin master
  4. # 第一次推送master分支的所有内容
  5. git push -u origin master

15、从远程仓库克隆一个本地仓库

  1. git clone <仓库ssh地址>
  2. eg.
  3. git clone git@gitee.com:aninn/pdd.git

分支管理

创建与合并分支

16、创建一个分支

  1. git branch <分支名>
  2. eg.
  3. git branch dev

17、切换分支

  1. (1) git checkout <分支名>
  2. git checkout -b dev
  3. # git checkout -b dev 创建并切换分支
  4. (2) git switch <分支名> [推荐使用这种方式]
  5. eg.
  6. git switch dev
  7. # git switch -c dev 创建并切换分支

18、查看分支

  1. git branch
  2. # git branch命令会列出所有分支,当前分支前面会标一个*号。

19、合并某分支到当前分支

  1. git merge <分支名>
  2. eg.
  3. git merge dev
  4. git merge --no-ff -m "merge with no-ff" dev
  5. # 因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
  6. # 用普通模式合并 合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并

20、删除分支

  1. git branch -d <分支名>
  2. eg.
  3. git branch -d test
  4. git branch -D test
  5. # -D 强制删除(无论是否合并分支)

Bug分支

21、临时保存修改

  1. git stash
  2. git stash list # 查看临时保存修改的列表
  3. git stash apply # 恢复临时保存的修改内容 但是恢复后,stash内容并不删除,你需要用 git stash drop 来删除;
  4. git stash pop # 恢复的同时把stash内容也删了:
  5. # 多次保存恢复指定的stash
  6. $ git stash apply stash@{0}

22、同步一次提交到当前分支

  1. git cherry-pick <提交ID>
  2. eg.
  3. git cherry-pick 4c805e2

23、查看远程仓库信息

  1. git remote
  2. param:
  3. -v # 显示更详细的信息
  4. eg.
  5. git remote -v

24、本地分支与远程分支建立连接关系

  1. git branch --set-upstream-to <branch-name> origin/<branch-name>
  2. eg.
  3. git branch --set-upstream-to dev origin/dev

25、在本地创建和远程分支对应的分支

  1. git checkout -b <branch-name> origin/<branch-name>
  2. eg.
  3. git checkout -b dev origin/dev
  4. # 本地和远程分支的名称最好一致;

26、把本地未push的分叉提交历史整理成直线

  1. git rebase
  2. # 其实原理非常简单。我们注意观察,发现Git把我们本地的提交“挪动”了位置,放到了f005ed4 (origin/master) set exit=1之后,这样,整个提交历史就成了一条直线。rebase操作前后,最终的提交内容是一致的,但是,我们本地的commit修改内容已经变化了,它们的修改不再基于d1be385 init hello,而是基于f005ed4 (origin/master) set exit=1,但最后的提交7e61ed4内容是一致的。
  3. # 这就是rebase操作的特点:把分叉的提交历史“整理”成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。

标签管理

27、创建标签

  1. git tag <tag version> [提交ID]
  2. eg.
  3. git tag v1.0.0
  4. # 默认为HEAD
  5. # 有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?
  6. # 方法是找到历史提交的commit id,然后打上就可以了:
  7. git tag v0.9 f52c633

28、查看标签列表

  1. git tag

29、查看tag详情信息

  1. git show <tagname>
  2. param:
  3. -a # 指定标签名
  4. -m # 指定说明文字
  5. eg.
  6. git show v1.0.0

注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

30、删除tag

  1. git tag -d <tag version>
  2. eg.
  3. git tag -d v1.0.0

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

31、推送某个标签到远程

  1. git push origin <tag version>
  2. eg.
  3. git push origin v1.0.0
  4. # 一次性推送全部尚未推送到远程的本地标签
  5. git push origin --tags

32、删除远程标签

  1. # 先从本地删除:
  2. git tag -d <tag version>
  3. # 然后,从远程删除。删除命令也是push,但是格式如下:
  4. git push origin :refs/tags/<tag version>
  5. eg.
  6. git tag -d v0.9
  7. git push origin :refs/tags/v0.9

33、忽略提交文件

  1. # 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

34、检查忽略规则

  1. git check-ignore <file name>
  2. eg.
  3. git check-ignore -v App.class
  4. # Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。

35、配置命令的别名

  1. git config alias.<别名名称> <原本的命令>
  2. param:
  3. --global # 针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
  4. eg.
  5. git config --global alias.st status
  6. git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
  7. # 配置文件放哪了?每个仓库的Git配置文件都放在.git/config文件中:
  8. # 别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。
  9. # 而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中:
  10. # 配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置。