zoukankan      html  css  js  c++  java
  • Git相关命令总结

    相关概念

    Git是一种可以记录某个文件夹下所有文件状态的版本管理工具,它可以将仓库恢复到任何状态时的仓库。

    状态?对Git而言哪些东西可以标识仓库的状态?

    • commit对象的SAH-1
    • 分支branch
    • HEAD:指向当前分支的最新指针,保存在.git/HEAD文件中
    • 标签tag

    这里包含远程分支的状态

    其实,状态本质上就是每次commit的对象。至于分支、HEADtag其实是一个特殊的指针,固定指向某个commit对象。

    既然我们可以将仓库恢复到之前任何commit对象,就需要保证commit对象在提交之后无法改变它。否则,版本控制就没有任何意义。

    git commit --amend说是可以修改上一个commit对象,但其实并不是。它是在上一个commit对象的基础上分叉新建一个commit对象。

    5、GitHublogo来源
    octocat

    其他知识

    1、初始化配置的6个命令

    • git config --global user.name wangjie_fourth
    • git config --global user.email wangjie_fourth@163.com
    • git config --global core.editor "code --wait"
    • git config --global push.default simple
    • git config --global core.quotepath false
    • git config --global core.autocrlf input
    • git config --global --list

    2、Git的几个区域

    • 未被管理的
    • 工作区
    • 暂存区
    • 仓库区

    在这几个区域转换的命令。

    常用命令

    这里分俩类介绍命令:

    • 版本提交相关的命令
    • 其他功能相关的命令

    一、版本提交命令

    • git checkout
    • git reset
    • git commit
    • git push
    • git merge
    • git rebase
    • git revert
    • git cherry-pick
    • git pull
    • git fetch

    git checkout

    1、功能
    切换分支或更新工作树文件。
    2、相关参数

    • b|B:创建新分支

    3、常用命令

    • git checkout [分支名称]
    • git checkout -b [新分支名称] [状态]
      以某个仓库状态作为基础创建新的分支。这个【状态】可以是远程分支,默认情况下是以当前状态做基础来新建分支。

    git reset

    1、介绍
    将当前的HEAD重置为指定状态,也可以重置到远程仓库的状态。

    2、相关参数
    -- soft:将现在与目标状态按照之前的差异保存,该放在工作区的放在工作区,该放在暂存区的放在暂存区
    -- mixed:将现在与目标状态的差异都放在【工作区】下。【默认】
    -- hard:不保存这俩个状态的差异

    3、使用场景

    • 用来撤销工作区、暂存区的修改。

    4、常用命令

    • git reset HEAD 文件名称
      将暂存区的文件恢复到上个状态版本。

    • git reset HEAD --hard
      将代码恢复到当前分支的HEAD状态,等价于丢弃当前工作区、暂存区的修改。注意这里未被管理的文件是不会发生改变的。

    git commit

    1、介绍
    Git仓库的修改

    2、相关参数
    -- amend:通过创建新的提交来替换当前分支的尖端
    -- squash:将多个commit压缩成一个commit

    3、常用命令

    • git commit --amend
      该命令功能是通过创建新的提交来替换当前分支的最新commit对象。
      image.png
      这个时候,如果直接push的话是有可能无法推送到远程分支,原因就是远程分支的最新节点是不是本地分支的历史节点。

      • 如果D没有被push到远程分支,此时就可以直接push
      • 如果D之前被push到远程分支,此时就不能push,需要先pull下来,再push
    • git commit --squash
      将多个commit压缩成一个commit
      优点:

      • 把所有变更合在一起,更容易阅读,对bisect友好
      • 想要回滚或者revert非常方便

    缺点:

    • 丢失了所有的历史记录【可以将这些commit信息都写在新的压缩commit上】

    git push

    1、介绍
    更新远程引用以及相关对象。每次push的要求是:

    • 本地仓库得父节点要是远程仓库得最新节点

    这也解释了为什么git commit --amend需要先pull一下

    git mergegit rebase

    这俩个命令都是合并多个分支代码,只不过是以不同方式来合并代码。即,git merge只是将多个分支的最新commit对象进行合并;而git rebase会将一个分支的所有commit对象都在另一个分支上进行合并。

    git merge优点:

    • 合并冲突解决简单,只需要解决一次冲突即可;
    • 记录了完整的版本历史;

    git merge缺点:

    • 仓库的提交历史会比较杂乱
    • git bisect命令不太友好

    git rebase优点

    • 仓库历史的提交记录比较整洁;
    • git bisect命令友好;

    git rebase缺点

    • 合并冲突解决复杂;但其实这点可以优化;

    但这里会有个问题?就是你无法将本地代码push到远程分支上,原因就是远程分支的最新节点不是本地分支的父节点。
    所以,一般使用这个命令时,都是在自己分支rebase然后再push到远程分支。
    使用squash将自己分支的提交压缩成新的commit,然后在rebase

    git revert

    1、功能
    还原之前的提交。通过创建一个commit将代码还原到之前commit的状态。
    通常用在:

    • 撤销历史种某个更改。如bug或不恰当的功能
    • 回滚某次发布
      比如说:假设你不想bad-feature分支上的commit,然后在master分支上执行git revert commitID

    git cherry-pick

    1、功能
    将某个提交在另外的分支上重新提交。一般是用在:

    • 希望把一个bug fix同步到较老的产品中
    • master上进行的变更,希望进入release环节
      2、使用举例
      master发布版本出现bug时,我们新建了fix-bug分支,并且在这个分支上解决了这个BUG。现在我们想把这个commit给应用到master分支和develop分支上。当然,我们可以通过merge来合并代码。
      但是,如果你现在想把这个commit合并到之前版本上的代码,这时候通过merge自然就不行了。这时候,可以通过上面这个命令来操作。
      切换到之前的版本上,在其执行git cherry-pick 改完bug的commit号即可。

    git fetch

    git fetch [repository] [remoteBranch:localBranch]
    从指定远程仓库或分支下载代码,到指定分支。默认是下载到当前分支。并将其保存到.git/refs/remotes文件夹下

    这个我只测试一个远程仓库。如果是多个远程仓库呢?会不会也放在这里?

    git pull

    • git pull = git fetch + git merge
    • git pull --rebase = git fetch + git rebase

    二、其他功能命令

    • git bisect
    • git stash
    • git log
    • git tag

    git bisect

    1、功能
    如果出现bug时,可以使用二分查找,找出哪个commit引入这个bug
    其实在软件解决bug有俩个方式:

    • 如果这个bug比较简单,可以找到定位到代码,然后就可以解决了;
    • 如果这个bug难以定位,但是在之前版本并没有出现这个错误,就可以通过这个命令找到;

    2、查找的原理

    git stash

    1、作用
    暂存更改的信息。恢复上次更改信息的命令是:git stash pop

    • 这个命令可以连续调用

    git tag

    1、作用
    生成一个标签指针,指向指定的代码仓库状态。

    • git tag在设计上,被设计成是不变的。所以:git pullgit pushgit fetch是不会更新tag的。只有加上git pull --tags才可以更新tag
    • git push --tags:将本地仓库的tag同步到远程仓库

    2、常用命令

    • 轻量级标签:lightweight tag:2.0
    • 标注的标签:annotated tag:这个tag有一个信息

    git log

  • 相关阅读:
    编译使用tinyxml
    GitLab 项目创建后地址由Localhost改为实际IP的方法
    树莓派相机设定
    MongoDB的数据备份与恢复
    Nginx PHP fpm forbidden 原因
    PSR2规范
    docker 日志管理
    Docker 拷贝文件
    Docker MySQL基本操作
    deepin安装php5.6
  • 原文地址:https://www.cnblogs.com/fourther/p/13702114.html
Copyright © 2011-2022 走看看