Contents

Git Common Instructions

Git 常用场景

pre-commit

https://pre-commit.com/#usage

新建分支

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分支并推到远程

  1. git push --delete origin prepublish
  2. git checkout develop
  3. git checkout -b prepublish
  4. git push -u origin prepublish

跟踪场景

跟踪分支 -u选项是–set-upstream-to的简写

  1. 手动建立追踪关系
git branch --set-upstream-to=origin/branch branch
# 等同↓↓↓↓↓
git branch -u origin/branch branch
git branch --track branch origin/branch
  1. push时建立追踪关系
git push -u origin/branch branch
# 等同↓↓↓↓↓
git push --set-upstream origin/branch branch
git push -v --set-upstream origin beta4:beta4 //sourcetree直接提交远程写法
  1. 新建分支时建立跟踪关系
git checkout -b branch origin/branch
  1. 远程已经存在分支,本地不存在对应分支
git checkout --track origin/branch
  1. 取消跟踪
git branch --unset-upstream
  1. 查看跟踪关系
git branch -vv
  1. 设置远程追踪
git remote add upstream https://github.com/xxx.git
# https://blog.csdn.net/qianghaohao/article/details/79330114

修改远程提交信息

  1. git rebase -i HEAD~3
  2. 把commit信息对应的pick 更改为edit然后保存退出
  3. git rebase --amend
  4. 运行上述命令后在弹出文本编辑界面重新提交commit信息,完成后保存退出
  5. git rebase -- continue
  6. 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

Other

  1. Git 修改提交的邮箱或用户名
  2. newren/git-filter-repo: Quickly rewrite git repository history (filter-branch replacement)
  3. Git - 重写历史