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. pil numpy转换二值图
  2. python画曲线图例-Python数据可视化之Matplotlib(折线图)
  3. 在linux上安装jdk(转载)
  4. 在Data Lake Analytics中使用视图
  5. 实例46:python
  6. php递归算法排序,php常用的排序算法代码[冒泡,递归排序-PHP源码
  7. 数组的连续最大子段和
  8. 打包windows 和 linux caffe 版本的人脸识别 人脸年龄估计 人脸性别模型的总结
  9. python函数isdisjoint方法_Python学习之---Python中的内置函数(方法)(更新中。。。)...
  10. postgresql事务
  11. Wannafly挑战赛27: C. 蓝魔法师(树形DP)
  12. c#解析XML到DATASET及dataset转为xml文件函数
  13. 重构:如何去掉代码中的S味
  14. mysql数据库cms数据库文件_PbootCMS 默认数据库转Mysql数据库教程 - 老蒋SEO博客
  15. RHadoop的安装与试验
  16. 自助取号机应用-排队叫号机优势介绍
  17. bzoj3207主席树
  18. 面试你对计算机未来三年内规划,2019农商银行面试:谈谈你未来3年的规划
  19. TIC TAC TOE 井字游戏
  20. 毕业设计开题报告撰写方法

热门文章

  1. 云开发谁是卧底小程序源码
  2. iOS 9 的新特性
  3. R语言使用rbern函数生成符合伯努利分布(0-1分布)的随机数、使用plot函数可视化符合伯努利分布的随机数( Bernoulli distribution)
  4. 中国时尚KOL的流变,谁会成为奢侈品牌的“新宠”?
  5. 企业邮箱如何申请注册,邮箱申请如何免费注册?
  6. 电子笔记神器——Typora
  7. php待办事项设计,Laravel 5.4 创建待办事项
  8. win2api 创建进程简介
  9. 用专业的一个服装进销存软件「商陆花」做生意!太省事了
  10. 为什么西汉“透光镜”会产生奇异的透光现象?