废话少说,直接上代码:
# 生成 ssh keys
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 全局配置
git config --global user.name "<username>"
git config --global user.email "<username>@xxx.com"
# 查看日志
git log
git log --pretty=oneline # 单行日志
git log --graph --abbrev-commit # 图形日志+简约id
# 查看HEAD日志
git reflog # 查询每一次的命令日志(通常和回滚一起使用,查找commitId)
# 撤销修改
git restore --staged <fileName> # 还原staged区文件
git restore <fileName> # 还原工作区文件(还原到上一个staged或者版本库)
# 查看修改
git diff <fileName> # 查看工作区和(staged|版本库)里面最新版本的区别
git diff HEAD -- <fileName> # 查看(工作区|staged区)和版本库里面最新版本的区别
# 删除文件
git rm <fileName> # 从版本库中删除该文件
# 回滚
git reset --hard # 当前节点(取消所有更改)
git reset --hard HEAD^ # 上一个节点
git reset --hard HEAD^^ # 上两个节点
git reset --hard HEAD~100 # 上100个节点(100可修改)
git reset --hard <commitId> # 指针HEAD移动到指定节点
git reset --soft xxx # 软回滚,不回滚代码,只回滚提交操作
# 穿梭
git checkout <commitId> # HEAD指针指向某个节点,以恢复当时的文件(经常用来从此节点创建新分支)
git checkout <commitId> <fileName> # 把当前状态的某个文件内容覆盖为某个版本,会影响你当前的工作区(不要轻易做作这个操作)
# 撤销
git revert <commitId> # 撤销一次提交(git会重新做一个新的提交来撤销修改,而不是删除某次提交)
git revert -m 1 <commitId> # 撤销merge合并,-m后面带的参数值可以是1或者2,表示要保留哪个分支的修改。(master上执行git merge dev,1:master,2:dev)
# 我们要记住,因为我们抛弃过之前dev合并过来的commit,下次dev再往master合并,之前抛弃过的其实是不包含在里面的。我们把之前master那个带有【反操作】的commit给撤销掉就可以重新merge了。
# 提交
git commit --amend # 修改上一次提交注释
# 创建分支
git branch <branch> # 创建分支
git checkout <branch> # 切换分支
git switch <branch> # 切换分支
git checkout -b <branch> # 创建并切换分支
git switch -c <branch> # 创建并切换分支
git branch -d <branch> # 删除分支
git branch -D <branch> # 强制删除分支,当分支从未被合并过,会提示使用-D来强制删除,防止提交丢失
git checkout -b <branch> origin/<branch> # 创建并对应远程分支
git branch --set-upstream-to <branch> origin/<branch> # 对应远程分支
# 创建标签
git tag # 查看所有标签
git tag <tagName> # 打标签
git tag <tagName> <commitId> # 给特定提交打标签
git tag -a <tagName> -m "<description>" # 附加标签说明
git show <tagName> # 查看标签信息
git push origin --tags # 推送本地所有标签
git push origin <tagName> # 推送单个标签
git tag -d <tagName> # 删除本地标签
git push origin :refs/tags/<tagName> # 删除远程标签
git tag -l | xargs git tag -d # 删除所有本地标签
git show-ref --tag | awk '{print ":" $2}' | xargs git push origin # 删除所有远程标签
# 合并
git merge <branch> # 合并<branch>到当前分支,无冲突的话就是fast-forward模式
git merge <branch> --no-off -m "<说明>" <branch> # 禁止使用fast-forward模式,这样merge时生成一个新的commit,会保留分支信息
git merge --abort # 放弃正在merge的操作
# 工作现场
git stash # 保存现场
git stash push -m "<说明>" # 保存现场并添加说明
git stash list # 列出所有现场
git stash pop # 恢复最新的现场,并从stash list中删除
git stash apply <stash> # 恢复指定的现场,但是不从stash list中删除
git stash drop <stash> # 删除指定的现场
# 复制提交
git cherry-pick <commitId> # 将其他分支的提交“复制”(git将自动做一次提交,所以commitId是不同的)到当前分支
# 配置remote地址
git remote -v # 查看remote库
git remote rm origin # 删除remote库
git remote add origin <remote> # 添加remote库
git remote set-url origin <remote> # 修改remote库
# 推送remote分支
git push -u origin master # 第一次推送master分支的所有内容
git push origin <branch> # 推送分支
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。