美文网首页互联网科技
Git常用命令分享

Git常用命令分享

作者: visionarywind | 来源:发表于2016-09-14 11:18 被阅读78次

    Git常用命令

    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提交


    • rebase提交


    • 一个实例
    • merge


      merge
    • rebase


      rebase

    压缩提交

    git rebase 使用

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

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

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

    4 git revert

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

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

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


      撤销还原

    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 reset作用域

    文件层面

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

    总结

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

    6 ^ 和 ~

    • 相当于父提交,有多个父提交时,加上数字表示第几个父提交,相当于^1
    • ~n相当于连续的n个^
      一个例子
      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常用命令分享

        本文链接:https://www.haomeiwen.com/subject/urjvettx.html