前言
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重新开始就行。这个教程中所有的步骤都可以在一个新的沙箱环境中运行,所以不用重新把每个任务都做一遍。
目录
- 修改你的最后一次提交
修改你的最后一次提交
让我们以一些例子开始吧:修复你最近的一次提交。让我们添加一个文件到沙箱环境的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将被用于本次提交,这个新创建的提交和当前的提交具有相同的父节点相同的作者。
网友评论