1、创建版本库
git init
2、添加到暂存区
git add <file>
param:
-f # 强制添加添加(无论是否被忽略)
eg.
git add Readme.txt
3、添加文件到Git仓库
git commit -m "提交注释"
eg.
git commit -m "remove readme-en.txt"
4、查看仓库当前的状态
git status
5、对比文件
git diff <file>
eg.
git diff Readme.txt
6、查看git提交日志
git log
eg.
git log --pretty=oneline
# --pretty=oneline 输出为一行
git log --graph --pretty=oneline --abbrev-commit
# --graph 查看分支合并图
7、版本回退
git reset --hard HEAD^
^代表回退到上一个版本
^^代表两个 以此类推
指定版本
git reset --hard <version>
eg.
git reset --hard 1094a
8、查看命令执行记录
git reflog
9、用版本库里的版本替换工作区的版本
git checkout -- <file>
eg.
git checkout -- Readme.txt
10、撤销暂存区的修改,重新放回工作区
git reset HEAD <file>
eg.
git reset HEAD Readme.txt
11、删除
git rm <file>
eg.
git rm Readme-En.txt
12、创建SSH Key
ssh-keygen -t rsa -C "youremail@example.com"
eg.
ssh-keygen -t rsa -C "1119772098@qq..com"
# path:用户主目录/.ssh/
# id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
13、关联一个远程库
git remote add origin <git ssh addr>
eg.
git remote add origin git@gitee.com:aninn/pdd.git
# 删除已关联的名为origin的远程库
git remote rm origin
14、把本地库的内容推送到远程
git push origin <分支>
eg.
git push origin master
# 第一次推送master分支的所有内容
git push -u origin master
15、从远程仓库克隆一个本地仓库
git clone <仓库ssh地址>
eg.
git clone git@gitee.com:aninn/pdd.git
分支管理
创建与合并分支
16、创建一个分支
git branch <分支名>
eg.
git branch dev
17、切换分支
(1) git checkout <分支名>
git checkout -b dev
# git checkout -b dev 创建并切换分支
(2) git switch <分支名> [推荐使用这种方式]
eg.
git switch dev
# git switch -c dev 创建并切换分支
18、查看分支
git branch
# git branch命令会列出所有分支,当前分支前面会标一个*号。
19、合并某分支到当前分支
git merge <分支名>
eg.
git merge dev
git merge --no-ff -m "merge with no-ff" dev
# 因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
# 用普通模式合并 合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并
20、删除分支
git branch -d <分支名>
eg.
git branch -d test
git branch -D test
# -D 强制删除(无论是否合并分支)
Bug分支
21、临时保存修改
git stash
git stash list # 查看临时保存修改的列表
git stash apply # 恢复临时保存的修改内容 但是恢复后,stash内容并不删除,你需要用 git stash drop 来删除;
git stash pop # 恢复的同时把stash内容也删了:
# 多次保存恢复指定的stash
$ git stash apply stash@{0}
22、同步一次提交到当前分支
git cherry-pick <提交ID>
eg.
git cherry-pick 4c805e2
23、查看远程仓库信息
git remote
param:
-v # 显示更详细的信息
eg.
git remote -v
24、本地分支与远程分支建立连接关系
git branch --set-upstream-to <branch-name> origin/<branch-name>
eg.
git branch --set-upstream-to dev origin/dev
25、在本地创建和远程分支对应的分支
git checkout -b <branch-name> origin/<branch-name>
eg.
git checkout -b dev origin/dev
# 本地和远程分支的名称最好一致;
26、把本地未push的分叉提交历史整理成直线
git rebase
# 其实原理非常简单。我们注意观察,发现Git把我们本地的提交“挪动”了位置,放到了f005ed4 (origin/master) set exit=1之后,这样,整个提交历史就成了一条直线。rebase操作前后,最终的提交内容是一致的,但是,我们本地的commit修改内容已经变化了,它们的修改不再基于d1be385 init hello,而是基于f005ed4 (origin/master) set exit=1,但最后的提交7e61ed4内容是一致的。
# 这就是rebase操作的特点:把分叉的提交历史“整理”成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。
标签管理
27、创建标签
git tag <tag version> [提交ID]
eg.
git tag v1.0.0
# 默认为HEAD
# 有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?
# 方法是找到历史提交的commit id,然后打上就可以了:
git tag v0.9 f52c633
28、查看标签列表
git tag
29、查看tag详情信息
git show <tagname>
param:
-a # 指定标签名
-m # 指定说明文字
eg.
git show v1.0.0
注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
30、删除tag
git tag -d <tag version>
eg.
git tag -d v1.0.0
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
31、推送某个标签到远程
git push origin <tag version>
eg.
git push origin v1.0.0
# 一次性推送全部尚未推送到远程的本地标签
git push origin --tags
32、删除远程标签
# 先从本地删除:
git tag -d <tag version>
# 然后,从远程删除。删除命令也是push,但是格式如下:
git push origin :refs/tags/<tag version>
eg.
git tag -d v0.9
git push origin :refs/tags/v0.9
33、忽略提交文件
# 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
34、检查忽略规则
git check-ignore <file name>
eg.
git check-ignore -v App.class
# Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。
35、配置命令的别名
git config alias.<别名名称> <原本的命令>
param:
--global # 针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
eg.
git config --global alias.st status
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"
# 配置文件放哪了?每个仓库的Git配置文件都放在.git/config文件中:
# 别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。
# 而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中:
# 配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置。