Git rebase tutorial translate

前言

Git rebase 是git的一个附加的核心功能,用于编辑提交历史。git不像有的版本控制工具对待提交历史那么苛刻,在git中,我们可以根据我们的需要更改提交历史。这给了我们一个强有力的工具使得我们可以像进行重构来维护良好的软件设计实践一样去 组织出一个非常棒的提交历史。这些功能可能会吓到一些新手,甚至也吓到一些git中级用户,但是这篇教程将帮助你剥去Git rebase 这个强有力的工具的面纱。

提醒

一般情况下,我们不建议更改公共,共享,或者标准分支的提交历史。你可以修改一些功能性分支的历史,或者一些个人仓库的副本的历史,还可以更改一些你还没有推送到远程仓库的提交历史。在更改你的提交历史之后,你可以使用git push -f 强制推送你的更改到一个个人仓库副本或者一些功能性分支上。

尽管有这个可怕的提醒,但是我们还要说明的是:在这个教程中提交的任何操作都是非毁灭性的操作。事实上,在git中丢失数据是非常难的。在本教程的末尾会介绍一些当你犯错误的时候的补救方法。

小广告

在你眼前的这篇教程由sourcehut提供,我们是一个非常牛逼的黑客锻造器(说白了就是能帮助程序员成长。。。)百分之百开源的Git或者Mercurial(也是一个版本控制工具)主机,持续集成,邮件列表我们都提供。而且不需要JavaScript~

创建沙箱环境

我们不希望把你的真实项目搞乱,所以这个教程从头到尾都会在一个沙箱仓库中运行,运行下面的命令创建一个沙箱环境~

git init /tmp/rebase-sandbox
cd /tmp/rebase-sandbox
#为了简化教程的其余部分,我们添加了一个空的提交,因为如果要rebase到你的仓库的一个初始提交的话,我们需要一个特殊的命令,也就是git rebase --root
git commit --allow-empty -m "Initial commit"

如果你不小心写错了,直接rm -rf /tmp/rebase-sandbox重新开始就行。这个教程中所有的步骤都可以在一个新的沙箱环境中运行,所以不用重新把每个任务都做一遍。

目录

  1. 修改你的最后一次提交

修改你的最后一次提交

让我们以一些例子开始吧:修复你最近的一次提交。让我们添加一个文件到沙箱环境的git仓库,然后故意去制造一些错误。

echo "Hello wrold!" >greeting.txt
git add greeting.txt
git commit -m"Add greeting.txt"

修复这个错误很简单,我们只需要编辑这个文件文件然后以--amend提交,如下所示:

echo "Hello world!" >greeting.txt
git commit -a --amend

保存退出你的编辑器(在这你有一个机会可以更改提交的信息),你可以通过运行git show命令去查看修复过后的提交。

commit f5f19fbf6d35b2db37dcac3a55289ff9602e4d00 (HEAD -> master)
Author: Drew DeVault 
Date:   Sun Apr 28 11:09:47 2019 -0400

    Add greeting.txt

diff --git a/greeting.txt b/greeting.txt
new file mode 100644
index 0000000..cd08755
--- /dev/null
+++ b/greeting.txt
@@ -0,0 +1 @@
+Hello world!
-a选项的解释

使用git commit的-a选项可以自动添加已经被建立索引的文件的变更(如果该文件是你新加入项目的,并没有被git建立索引的话,该文件是不受影响的)到暂存区,或者自动删除已经被移除索引的文件,然后进行真正的提交。

--amend选项的解释

使用该选项可以将本次提交塞入到最近一次提交中。在git commit document中的解释是使用该选项会通过创建一个新的提交记录替换掉最近一次的提交,如果没有通过-m,-F,-C等选项指定提交的message,那么原来的message将被用于本次提交,这个新创建的提交和当前的提交具有相同的父节点相同的作者。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,392评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,258评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,417评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,992评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,930评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,199评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,652评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,327评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,463评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,382评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,432评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,118评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,704评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,787评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,999评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,476评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,057评论 2 341

推荐阅读更多精彩内容

  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 1,384评论 0 7
  • 前言 Git使用教程 Git是什么 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 ...
    90后的思维阅读 893评论 0 0
  • 多种多样的工作流使得在项目中实施Git时变得难以选择。这份教程提供了一个出发点,调查企业团队最常见的Git工作流。...
    JSErik阅读 4,353评论 2 8
  • 简书本身不支持生成目录,自己通过pandoc生成的目录在简书也变成了新页面打开。心好累,推荐大家用这个简书文章左侧...
    mkitclear阅读 383评论 0 0
  • 1. Git 1.1. Git是何方神圣? Git是用C语言开发的分布版本控制系统。版本控制系统可以保留一个文件集...
    spectatorNan阅读 2,236评论 1 7