Git Common Instructions
Git 常用场景
pre-commit
新建分支
git checkout develop
git pull
git branch feature/dev-branch # 创建分支
git checkout -b feature/dev-branch # 创建并切换到分支
提交
git status # 查看文件状态
git add . # 所有不在暂缓区的内容添加到暂缓区
git commit -m "message" # 提交仓库
rebase场景
场景:本地提交后推送时,远程分支已存在新的提交
传统做法:需要先拉取git pull再推送git push,但是这样会产生一个合并提交的记录
rebase使用:
方法1:git pull之后git rebase再git push
方法2:直接用git pull –rebase再git push
查看提交记录
git log --oneline --graph
# 等同↓↓↓↓↓
git log --graph --pretty=oneline --abbrev-commit
============
# 查看某提交名称
git show 7708b77 --name-only
git log 的常用选项
https://blog.raikay.com/post/2018/git-log/
选项 说明 -p
按补丁格式显示每个提交引入的差异。
–stat
显示每次提交的文件修改统计信息。
–shortstat
只显示 –stat 中最后的行数修改添加移除统计。
–name-only
仅在提交信息后显示已修改的文件清单。
–name-status
显示新增、修改、删除的文件清单。
–abbrev-commit
仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。
–relative-date
使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。
–graph
在日志旁以 ASCII 图形显示分支与合并历史。
–pretty
使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。
–oneline
–pretty=oneline –abbrev-commit 合用的简写。
拉取代码(不切换分支)
git fetch origin develop:develop
git fetch origin # 更新所有分支
回撤提交场景
# 将提交重置到某个提交
git reset --hard [hash] # --soft会保留提交的内容,--hard不会保留
git push -f
# 回滚提交场景(也会作为一次提交)
git revert [hash]
丢弃本地文件
方法1:回到当前版本(缺点:若存在新增目录不会自动删除)
git reset --hard
方法2:丢弃所有文件(分解多步)
git reset HEAD && git checkout . && git clean -df
# 撤回到工作区 && 丢弃所有本地文件修改 && 清除新增的文件和目录
删除远程分支
git branch -dr origin/branch
git push origin -d branch
or
https://www.cnblogs.com/eyunhua/p/8463200.html
git remote remove upstream
暂存
git stash
git stash pop
遴选场景
# 将某个提交合并到当前分支
git cherry-pick [hash]
# 若某个提交为合并提交,则加上-m
git cherry-pick [hash] -m 1
重置场景*********
测试分支与线上分支代码差异太大,需要重置测试分支 方法:删除远程beta,从develop分支新建beta分支并推到远程
git push --delete origin prepublish
git checkout develop
git checkout -b prepublish
git push -u origin prepublish
跟踪场景
跟踪分支 -u选项是–set-upstream-to的简写
- 手动建立追踪关系
git branch --set-upstream-to=origin/branch branch
# 等同↓↓↓↓↓
git branch -u origin/branch branch
git branch --track branch origin/branch
- push时建立追踪关系
git push -u origin/branch branch
# 等同↓↓↓↓↓
git push --set-upstream origin/branch branch
git push -v --set-upstream origin beta4:beta4 //sourcetree直接提交远程写法
- 新建分支时建立跟踪关系
git checkout -b branch origin/branch
- 远程已经存在分支,本地不存在对应分支
git checkout --track origin/branch
- 取消跟踪
git branch --unset-upstream
- 查看跟踪关系
git branch -vv
- 设置远程追踪
git remote add upstream https://github.com/xxx.git
# https://blog.csdn.net/qianghaohao/article/details/79330114
修改远程提交信息
git rebase -i HEAD~3
- 把commit信息对应的pick 更改为edit然后保存退出
git rebase --amend
- 运行上述命令后在弹出文本编辑界面重新提交commit信息,完成后保存退出
git rebase -- continue
git push origin master --force
本地配置
git config --local --list
设置本地属性
git config user.name xxx
git config user.email xxx
log自定义
# https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E5%8E%86%E5%8F%B2#pretty_format
git log --pretty=format:"%h - (%an --- %ae) : %s"
分支
git branch # 查看当前使用分支(结果列表中前面标*号的表示当前使用分支)
git branch -a # 查看远程分支(列出远程分支以及本地分支名)
git branch -r # 列出远程分支(远程所有分支名)
git branch 分支名 # 新建分支
git branch -d/D branch # 删除/强删分支
git branch -m ori new # 修改分支名
git checkout - # 切换到上一个分支
标签操作
git tag # 查看列出所有打过的标签名
git tag -d 标签名 # 删除对应标签
git tag 标签名字 # 在当前仓库打个标签
git tag foo -m "message" # 在当前提交上,打标签foo 并给message信息注释
git tag 标签名 哈希值 -m "message" # 在某个哈希值上打标签并且写上标签的信息
git tag foo HEAD~4 # 在当前提交之前的第4个版本上 打标签foo
贮藏
git stash # 把暂存区的内容 暂时放在其他中 使暂存区变空
git stash list # 查看stash了哪些存储
git stash pop # 将stash中的内容恢复到当前目录,将缓存堆栈中的对应stash删除
git stash apply # 将stash中的内容恢复到当前目录,不会将缓存堆栈中的对应stash删除
git stash clear # 删除所有缓存的stash
git stash drop stash@{0} # 删除指定
垃圾回收
在大多数情况下,用户不需要git prune直接调用,而是应该调用git gc,它可以处理修剪以及许多其他内务处理任务。
git gc
打包引用,打包有用的对象,过期reflog条目,修剪松散的对象,修剪删除的工作树,以及prunes / gc的旧git rerere数据。
查看大小
du -ah
查看所有提交者
git shortlog -s
本地标签清掉
git tag -l | xargs git tag -d
git tag -l
Sourcetree gitflow
# 完成功能分支
sh.exe \SourceTree\gitflow_local\gitflow\git-flow feature finish -k branch
# 完成修复分支
sh.exe \SourceTree\gitflow_local\gitflow\git-flow hotfix finish -k -n branch