git命令使用指南

概念篇

基础篇

1.提交命令

git commit :暂存仓库(索引仓库)提交到本地仓库的命令

2.合并命令

2.1 创建切换分支

  • git branch <分支名> : 创建分支
  • git checkout <分支名> : 切换到分支
  • git checkout -b <分支名> :创建新的节点并切换到新的节点
  • 使用~^使HEAD进行快速移动
    • ~选择第几代

    • ^选择哪个父记录

之后git commit时就是提交到分支,如果没有切换分支,就会在master上提交,mater节点就会变成刚刚提交的

2.2 合并分支(merge)

  • 场景:当有两个分支时,都是不同的修改内容,此时需要进行合并修改。
  • git merge <branchname>:将当前分支合并到branchname
  1. 创建分支并切换提交到新的分支上,

git checkout -b bugFix
git commit

  1. 切换回原来的分支并进行提交

git checkout master
git commit

  1. 合并分支

git merge bugFix

2.3 合并分支(rebase)

  • 场景:新建的分支经过复制再进行提交,好处是版本提交历史更加清楚
  • git rebase<branchname>:将当前分支进行复制并合并到branchname
  • 多次rebase使提交记录有序时:从最后一个提交记录开始rebase
  1. 新建分支并提交

git checkout -b bugFix
git commit

  1. 切换回master分支并提交

git checkout master
git commit

  1. 使用rebase命令对“bugFix”进行复制并合并到master

git rebase bugFix

高级篇

3.分离HEAD(项目树上的前后移动)

  • 场景:HEAD默认指向分支名,我们使用checkout的命令使HEAD指向某个提交记录

查看HEAD指向:cat .git/HEAD
HEAD指向一个引用,使用如下命令查看它的指向:git symbolic-ref HEAD

  1. 切换到某个分支名,并进行checkout某个提交记录

假如现在有一个“bugFix分支,下面有一个叫c4的提交记录”
git checkout c4

4.相对引用

  • 场景:相对引用的出现是针对HEAD指向。当真实项目出现的某个提交记录是hash值,hash值过于长。

4.1 相对引用(^ & ~)

  • 解决方案:
    • 我们只需要输入hash值的前几位就可以。

    使用 git checkout <分支名>^ 进行向上的移动
    使用 git checkout HEAD^ 进行向上的移动
    使用 git checkout HEAD^^^ 进行向上的三次移动
    使用git checkout HEAD ~3 进行向上的三次移动

5.强制分支移动 -f

  • 命令解读:git branch -f master HEAD~3
    • 让master强制指向HEAD向上移动3的位置(分支名同理)

6.撤销变更

撤销变更由底层部分(暂存区的独立文件或者片段)和上层部分(变更到底是通过哪种方式被撤销的)组成。

6.1 变更一:git reset

通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。git reset向上移动分支,原来指向的提交记录就跟从来没有提交过一样。
虽然在你的本地分支中使用 git reset 很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的哦!为了撤销更改并分享给别人,我们需要使用 git revert。
命令:

git reset <branch or hash or HEAD>~1:回退1步;

6.2 变更二:git revert

在我们要撤销的提交记录后面居然多了一个新提交!这是因为新提交记录 C2’ 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。也就是说 C2’ 的状态与 C1 是相同的
命令:

git revert <branch or hash or HEAD>

移动提交记录

7.整理提交记录

有计划的提交。

7.1 Git Cherry-pick

命令:

git cherry-pick <hash> : 可以将提交树上任何地方的提交记录取过来追加到 HEAD 上。
注: 只适用于知道hash名

7.2 可交互式的rebase

使用带参数 –interactive 的 rebase 命令, 简写为 -i。如果你在命令后增加了这个选项, Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。在实际使用时,所谓的 UI 窗口一般会在文本编辑器 —— 如 Vim —— 中打开一个文件。
命令:

git rebase -i HEAD~3对向上三个提交记录进行交互

提交技巧

8.提交技巧

背景: 我们提交了多次记录,如c2,c3。此时我们想修改c2。c3保持不变。
解决:
方案一: 使用 rebase -i将需要修改记录提出来,对c2进行分离:使用git commit --amend,之后再使用rebase -i进行排序。
方案二: 使用git commit --amend 对c2进行分离,再使用git cherry-pick c2' c3进行分支合并。

9.永久标记(标签)

背景:分支会移动,使用git tag <tag name><branch> 可以永久标记。当有重大版本时可以进行使用。此时HEAD转变成分离状态,不能直接commit。

10.锚点

由于标签在代码库中起着“锚点”的作用,Git 还为此专门设计了一个命令用来描述离你最近的锚点(也就是标签),它就是 git describe!
Git Describe 能帮你在提交历史中移动了多次以后找到方向;当你用 git bisect(一个查找产生 Bug 的提交记录的指令)找到某个提交记录时,或者是当你坐在你那刚刚度假回来的同事的电脑前时, 可能会用到这个命令。

命令git describe <ref>
<ref> 可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会以你目前所检出的位置(HEAD)。

输出结果<tag>_<numCommits>_g<hash>
tag 表示的是离 ref 最近的标签numCommits 是表示这个 ref 与 tag 相差有多少个提交记录hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位
当 ref 提交记录上有某个标签时,则只输出标签名称

命令解析:git describe master输出离master最近的标签和步数、hash。
输出解析v0_2_gc2v0为最近的标签,2为与master相差的记录数,hash为最近标签的hash值前几位。

远程命令

11.远程仓库

git clone 命令在真实的环境下的作用是在本地创建一个远程仓库的拷贝(比如从 github.com)。

12.远程分支

在我们的本地仓库多了一个名为 o/master 的分支, 这种类型的分支就叫远程分支。由于远程分支的特性导致其拥有一些特殊属性。远程分支反映了远程仓库(在你上次和它通信时)的状态。这会有助于你理解本地的工作与公共工作的差别 —— 这是你与别人分享工作成果前至关重要的一步。
远程分支有一个特别的属性,在你检出时自动进入分离 HEAD 状态。Git 这么做是出于不能直接在这些分支上进行操作的原因, 你必须在**别的地方(本地仓库)**完成你的工作。更新了远程分支之后)再用远程分享你的工作成果。
<remote name>/<branch name>:远程仓库默认为 origin,简写为 o 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值