1,提交。

git commit

不同功能、模块(分在不同分支就没这么多问题了)分开提交

2,新建分支。新建分支。

git branch newbranchname新分支名字

git checkout -b newbranch新分支名字

git checkout otherbranch其他分支名字

git branch之后,HEAD还在原分支上,提交的话还是会提交到原分支上,需要git checkout到新分支。git checkout -b就相当于git branch + git checkout,新建分支并将HEAD到新分支。

git checkout 就是切换到其他分支

3,合并分支(merge)

git merge

分支与合并

太好了! 我们已经知道如何提交以及如何使用分支了。接下来咱们看看如何将两个分支合并到一起。就是说我们新建一个分支,在其上开发某个新功能,开发完成后再合并回主线。

咱们先来看一下第一种方法 —— git merge。在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。翻译成自然语言相当于:“我要把这两个父节点本身及它们所有的祖先都包含进来。”

要想通过这一关,需要以下几步:

  • 创建新分支 bugFix
  • git checkout bugFix 命令切换到该分支
  • 提交一次
  • git checkout master 切换回 master
  • 再提交一次
  • git mergebugFix 合并到 master

  • 你随时都可以用“objective”命令来打开这个对话框!*

4,合并分支(git rebase)

git rebase master

第二种合并分支的方法是 git rebase。Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。

Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。

在当前a分支,git rebase另一b分支,意思就是以b分支为基础,将a分支内容按照线性顺序提交。

5,在提交树上移动HEAD

git checkout 哈希值,分离HEAD

git checkout 分支名,切换分支

HEAD

我们首先看一下 “HEAD”。 HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。

HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。

HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。

(译者注:实际这些命令并不是真的在查看 HEAD 指向,看下一屏就了解了。如果想看 HEAD 指向,可以通过 cat .git/HEAD 查看, 如果 HEAD 指向的是一个引用,还可以用 git symbolic-ref HEAD 查看它的指向。但是该程序不支持这两个命令)

分离的 HEAD 就是让其指向了某个具体的提交记录而不是分支名。在命令执行之前的状态如下所示:

HEAD -> master -> C1

HEAD 指向 master, master 指向 C1

6,相对引用

git checkout master^;直接用分支名引用

git checkout c4; git checkout HEAD^;先分离HEAD,再用HEAD引用

git branch -f master HEAD~3;相对引用为我们提供了一种简洁的引用提交记录 C1 的方式, 而 -f 则容许我们将分支强制移动到那个位置。

git branch -f master c6

git branch -f bugFix HEAD^^;【git branch -f bugFix HEAD~2】

git checkout HEAD^

相对引用

通过指定提交记录哈希值的方式在 Git 中移动不太方便。在实际应用时,并没有像本程序中这么漂亮的可视化提交树供你参考,所以你就不得不用 git log 来查查看提交记录的哈希值。

并且哈希值在真实的 Git 世界中也会更长(译者注:基于 SHA-1,共 40 位)。例如前一关的介绍中的提交记录的哈希值可能是 fed2da64c0efc5293610bdd892f82a58e8cbc5d8。舌头都快打结了吧...

比较令人欣慰的是,Git 对哈希的处理很智能。你只需要提供能够唯一标识提交记录的前几个字符即可。因此我可以仅输入fed2 而不是上面的一长串字符。

使用相对引用的话,你就可以从一个易于记忆的地方(比如 bugFix 分支或 HEAD)开始计算。

相对引用非常给力,这里我介绍两个简单的用法:

  • 使用 ^ 向上移动 1 个提交记录
  • 使用 ~<num> 向上移动多个提交记录,如 ~3

首先看看操作符 (^)。把这个符号加在引用名称的后面,表示让 Git 寻找指定提交记录的父提交。

所以 master^ 相当于“master 的父节点”。

master^^master 的第二个父节点

现在咱们切换到 master 的父节点git checkout master^

“~”操作符

如果你想在提交树中向上移动很多步的话,敲那么多 ^ 貌似也挺烦人的,Git 当然也考虑到了这一点,于是又引入了操作符 ~

该操作符后面可以跟一个数字(可选,不跟数字时与 ^ 相同,向上移动一次),指定向上移动多少次。

我使用相对引用最多的就是移动分支。可以直接使用 -f 选项让分支指向另一个提交。例如:

git branch -f master HEAD~3

上面的命令会将 master 分支强制指向 HEAD 的第 3 级父提交。

7,撤销变更

git reset HEAD~1; reset用于撤销本地的提交

git revert HEAD; revert用于撤销远程的提交

撤销变更

git reset与git revert 都是对当前分支(星号)起作用,命令行中不用加分支。后面回退的步数可以用HEAD~1这样的引用,也可以用c1、c0这样的哈希码。

在 Git 里撤销变更的方法很多。和提交一样,撤销变更由底层部分(暂存区的独立文件或者片段)和上层部分(变更到底是通过哪种方式被撤销的)组成。我们这个应用主要关注的是后者。

主要有两种方法用来撤销变更 —— 一是 git reset,还有就是 git revert。接下来咱们逐个进行讲解。

Git命令练习 据说是90%相关推荐

  1. Git命令家底儿及Git数据通信原理详解

    声明:本文为CSDN原创投稿文章,未经许可,禁止任何形式的转载. 作者:周立伟(花名:华序,ITeye博客),关注分布式.高并发和Java中间件的研究. 责编:钱曙光,关注架构和算法领域,寻求报道或者 ...

  2. Git命令行介绍和使用说明(持续更新)

    Git命令行介绍和使用说明(持续更新) Git命令行介绍和使用说明(持续更新) 文档名称 Git命令行介绍和使用说明会 创建时间 2012/8/23 修改时间 2012/8/23 创建人 Baifx ...

  3. 常用的git命令(实用)

    文章目录 前言 一.git clone 二.git config 三.git branch 四.git checkout 五.git status 六.git add 七.git commit 八.g ...

  4. git 沙河游戏节点图, 自由沙盒模拟git, 各类交互git命令

    git学习练习总资源链接: https://try.github.io/ (练习已通,有document) 本沙盒游戏教学:https://learngitbranching.js.org/?demo ...

  5. git讲解以及git命令大全

    git是目前世界上最先进的分布式版本控制工具,他是林纳斯-托瓦兹开发的一款最初只能运行在linux上的代码管理工具,改工具的诞生也挺有意思的,具体git的前世今生大家可以去百度上看看,这里就不多说,反 ...

  6. git命令行推送本地分支到远程仓库

    之前说过Git与IDEA强强联合(HTTPS协议连接)那么如何使用命令行来推送代码呢? 如下图所示为一个基于layui的前端代码: 目录工作区文件: 本地内容就是将这些内容推送到远程仓库 首先使用gi ...

  7. 常用 Git 命令清单

    我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下 ...

  8. 使用git命令上传本地文件到GitHub上

    1.官网下载git并且anz安装 2.在Github上申请账号 3.在本地使用git命令生成私钥和公钥 连续按三次 回车键 $ ssh-keygen -t rsa -C "账号" ...

  9. java代码操作git_JGit--实现Git命令操作的Java API

    问题来源:最近在做一个项目,其中有一块需要用户上传代码到服务器中,然后分析用户所传的代码,传代码最直接的方式就是用户打个包上传,但是后期再分析代码的时候还要代码实现解压上传的代码,操作起来比较复杂. ...

最新文章

  1. python django web典型模块开发实战下载_Django实战 Python Web典型模块与项目开发
  2. node 使用 download-git-repo 下载 github 代码
  3. REMOTE HOST IDENTIFICATION HAS CHANGED
  4. python sklearn.preprocessing.standardScaler 的transform和fit_transform方法
  5. Entity Framework Core 2.0 全局查询过滤器
  6. MS SQL数据库备份和恢复存储过程
  7. jsp页面科学计数法显示问题的解决办法
  8. Win10系统下面的TR1008解决方案
  9. 风云武魂传说防御(四职业)
  10. 2021-10-18 构建电影数据库MovieDB(数据库第一次实验)
  11. STM32F412 串口接收不到数据的问题
  12. 蒲公英智能云数据管理|蒲公英智能云|TARA
  13. 刨根系列 之 Unity3D UGUI 背后的工作原理
  14. phpmywind教程:单页信息调用说明【进阶篇一】
  15. ai水墨晕染效果_AI可能是一位优秀的西方画家,但它在中国水墨画中表现良好吗?...
  16. 算法-动态规划-RNA最大碱基对匹配问题C语言求解
  17. Android定制属于你自己的导航栏
  18. WZOI-237猜猜谁是冠军
  19. Substance Designer 井盖
  20. css3 动画还原,CSS3animation动画-案例人物走路动画:(三)

热门文章

  1. 商务礼仪基本常识(转载)
  2. 华为android界面强刷救砖教程,华为手机救砖教程 一键救砖 华为手机怎么救砖
  3. 相对未知的协议将 Defi 中的 TVL 推高至 2000 亿美元以上
  4. 关于eclispe svn突然不能使用的解决方案SVN资源库报错:Could not create the view: org.tigris.subversion.subclipse.ui.repos
  5. HTML商品详情页(简单页面)
  6. flinkCDC+iceberg(hadoop catalog) 同步mysql数据库数据
  7. AR的未来在哪 天猫AR“拜年”互动指明方向
  8. java 线程亲缘性_亲缘性线程池,这是什么鬼?
  9. 高中数学知识点复习:幂函数与二次函数_图文(含解析)
  10. Golang LicenseServer授权服务器的设计 与 RSA 密钥对的应用