Git常用命令分享

Git常用命令

Git常用命令分享_第1张图片
Git操作
  • git diff vs git log
  • git pull vs git fetch
  • git rebase
  • git revert
  • git reset vs git checkout vs git revert
  • ^ 和 ~
  • alias

1 git diff vs git log

  • git diff master..test
    比较master与test差异
  • git log master..test
    查看test中尚未并入master的提交
  • git diff master…test
    比较master与test共有分支与test分支的差异
  • git log master…test
    查看只被master或test中某一个包含的差异性提交,加上--left-right可显示包含方
  • git diff支持目录提交差异,git log支持文件提交差异
    git diff HEAD -- ./dir 比较dir目录与HEAD提交的差异
    git log file 查看file提交历史
  • git diff --stat
    统计所有改动
  • git log --stat
    统计提交改动

2 git pull vs git fetch

  • git fetch
    下载远程分支,然后更新本地FETCH_HEAD文件
    git fetch : git fetch origin
  • git pull
    下载远程分支,然后合并至当前HEAD
    git pull = git fetch + git merge FETCH_HEAD

多用git fetch,少用git pull

3 git rebase

  • 线性提交 与git merge功能类似
    git merge:新的提交将分支的提交历史连在一起,生成merge提交
    git rebase:重写提交历史,把整个分支移动到待合并分支后
  • 压缩提交
    删除不必要的提交

线性提交

  • merget提交


    Git常用命令分享_第2张图片
  • rebase提交


    Git常用命令分享_第3张图片
  • 一个实例
  • merge


    Git常用命令分享_第4张图片
    merge
  • rebase


    Git常用命令分享_第5张图片
    rebase

压缩提交

Git常用命令分享_第6张图片

git rebase 使用

使用git rebase:一个干净的线性的提交历史

  • git rebase
    为基,重写当前提交历史 [可以加上 -i]
  • git merge-base
    返回基提交ID
  • git rebase –i HEAD~3
    重写当前HEAD最新3次提交历史
  • git pull –rebase
    通过变基来整合远程分支

注意:
rebase会重写提交历史,不要在公共的分支上使用

4 git revert

  • git revert
    生成一个新的提交,撤销一个已经存在提交的所有修改

对于merge commit的提交:git revert –m 1[2]
-m i :需要保留的父节点是第i父提交

Git常用命令分享_第7张图片
git revert
  • git revert需要注意的问题
    合并曾经被revert的提交,会保留revert的信息,从而导致部分提交无法应用到新的分支,解决这个最好的方式是撤消还原原始的合并


    Git常用命令分享_第8张图片
    撤销还原

5 git reset vs git checkout vs git revert

提交层面

  • git reset
    reset将分支的末端指向另一个提交,移除当前提交
  • git checkout
    checkout移动HEAD指向某个引用
  • git revert
    重新生成一个提交增加到当前的commit

git reset --soft –mixed --hard

Git常用命令分享_第9张图片
git reset作用域

文件层面

  • git reset
    将缓存区同步至指定的提交,不影响工作目录
  • git checkout
    将工作目录同步至指定的提交,不影响提交
  • git revert
    无文件层面操作

总结

命令 作用域 常用情景
git reset 提交层面 在私有分支上舍弃一些没有提交的更改
git reset 文件层面 将文件从缓存区中移除
git checkout 提交层面 切换分支或查看旧版本
git checkout 文件层面 舍弃工作目录中的更改
git revert 提交层面 在公共分支上回滚更改
git revert 文件层面 (然而并没有)

6 ^ 和 ~

  • 相当于父提交,有多个父提交时,加上数字表示第几个父提交,相当于^1
  • ~n相当于连续的n个^
    Git常用命令分享_第10张图片
    一个例子

    HEAD^:4927 HEAD^2:063f HEAD^3:4f9c
    HEAD~:4927 HEAD~2:1c73

7 alias

  • st=status co=checkout br=branch ci=commit
  • mg=merge md=commit --amend dt=difftool mt=mergetool
  • last=log -1 HEAD cf=config line=log --oneline visual=!gitk
  • ls=log --pretty=format:\"%C(yellow)%h %C(blue)%ad %C(red)%d %C(reset)%s %C(green)[%cn]\" --decorate --date=short
  • hist = log --pretty=format:\"%C(yellow)%h %C(red)%d %C(reset)%s %C(green)[%an] %C(blue)%ad\" --topo-order --graph --date=short
  • lg=log --color --graph --pretty=format:"%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset" --abbrev-commit
  • ld = log --pretty=format:"%C(yellow)%h\\ C(green)%ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=short --graph

深入学习

git recipes

你可能感兴趣的:(Git常用命令分享)