做药品的电商网站有哪些,颜金华深圳广告公司,公司企业网站开发,网站营销的定义当我们修改完代码#xff0c;提交了一个 commit#xff0c;然后发现改错了#xff0c;怎么修正#xff1f;这种情况分为两种#xff1a;修正最近一次提交#xff0c;和修正历史多个提交。修正最近一次提交如果发现刚刚提交的内容有错误#xff0c;当场再修改一下再提交一… 当我们修改完代码提交了一个 commit然后发现改错了怎么修正这种情况分为两种修正最近一次提交和修正历史多个提交。修正最近一次提交如果发现刚刚提交的内容有错误当场再修改一下再提交一个新 commit 不就可以么可以是可以不过还有一个更加优雅和简单的解决方法git commit --amend
amend 是“修正”的意思。在提交时如果加上 --amend 参数Git 不会在当前 commit 上增加 commit而是会把当前 commit 的内容和暂存区stageing area里的最近一次 commit 的内容合并起来后创建一个新的 commit用这个新的 commit 把之前最新的 commit 替换掉。所以 commit --amend 做的事就是它的字面意思对最新一条 commit 进行修正。具体地比如你发现刚刚的提交中 foo.txt 文件有错别字你就可以把文件中的错别字修改好之后输入以下命令git add foo.txt
git commit --amend
此时 Git 会把你带到提交信息编辑界面。提交信息默认是最近那次提交时填的信息。你可以修改或者保留它然后保存退出。然后你的最新 commit 就被更新了。需要注意的有一点commit --amend 并不是直接修改原 commit 的内容而是如上面动图所示生成一条新的 commit。修正历史多个提交commit --amend 可以修正最新 commit 的错误但如果是倒数第二个、第三个 commit 写错了怎么办如果不是最新的 commit 写错就不能用 commit --amend 来修复了而是要用 rebase。不过需要给 rebase 也加一个参数-i。rebase -i 是 rebase --interactive 的缩写形式意为“交互式变基”。所谓交互式 rebase就是在 rebase 的操作执行之前你可以指定要 rebase 的 commit 链中的哪一个 commit 是否需要进一步修改。那么你就可以利用这个特点进行一次原地 rebase。例如你是在写错了 commit 之后又提交了一次才发现之前写错了。现在再用 commit --amend 已经晚了此时就要用 rebase -i 命令了git rebase -i HEAD^^
在 Git 中有两个「偏移符号」^ 和 ~。^ 的用法在 commit 的后面加一个或多个 ^ 号可以把 commit 往回偏移偏移的数量是 ^ 的数量。例如master^ 表示 master 指向的 commit 之前的那个 commitHEAD^^ 表示 HEAD 所指向的 commit 往前数两个 commit。~ 的用法在 commit 的后面加上 ~ 号和一个数可以把 commit 往回偏移偏移的数量是 ~ 号后面的数。例如HEAD~5 表示 HEAD 指向的 commit往前数 5 个 commit。上面这行代码表示把当前 commit HEAD 所指向的 commit rebase 到 HEAD 向前两个的 commit 上如果没有 -i 参数的话这种原地 rebase 相当于空操作会直接结束。而在加了 -i 后就会跳到一个新的界面pick 310154e 第 N-2 次提交
pick a5f4a0d 第 N-1 次提交# Rebase 710f0f8..a5f4a0d onto 710f0f8
#
# Commands:
# p, pick commit use commit
# r, reword commit use commit, but edit the commit message
# e, edit commit use commit, but stop for amending
# s, squash commit use commit, but meld into previous commit
# f, fixup commit like squash, but discard this commits log message
# x, exec command run command (the rest of the line) using shell
# b, break stop here (continue rebase later with git rebase --continue)
# d, drop commit remove commit
...
这个编辑界面的最顶部列出了将要被 rebase 的所有 commits也就是倒数第二个 commit “第 N-2 次提交”和最近的 commit “第 N-1 次提交”。需要注意这个排列是正序的旧的 commit 会排在上面新的排在下面。这两行指示了两个信息需要处理哪些 commit 和如何处理它们。你需要修改这两行的内容来指定你需要的操作。每个 commit 默认的操作都是 pick表示直接应用这个 commit。所以如果你现在直接退出编辑界面那么结果仍然是空操作。但你的目标是修改倒数第二个 commit也就是上面的那个“第 N-2 次提交”所以你需要把它的操作指令从 pick 改成 edit 。edit 的意思是应用这个 commit然后停下来等待继续修正。其他的操作指令在这个界面里都已经列举了出来下面的 Commands… 部分文字你可以自己研究一下。edit 310154e 第 N-2 次提交
pick a5f4a0d 第 N-1 次提交...
把 pick 修改成 edit 后就可以退出编辑界面了并输出以下信息$ git rebase -i HEAD^^
Stopped at 310154e... 第 N-2 次提交
You can amend the commit now, withgit commit --amendOnce youre satisfied with your changes, rungit rebase --continue
上图的提示信息说明rebase 过程已经停在“第 N-2 次提交”的 commit 的位置那么现在你就可以去修改你想修改的内容了。修改完成后和前文修改最近提交的方法一样用 commit --amend 把修改原地应用到一个新的 commitgit add foo.txt
git commit --amend
这样你的倒数第二个错误的 commit 就被修正了。在此过程中把原来倒数第二个 commit 的内容和当前修改的内容合并在一起创建了一个新的 commit并用此 commit 原地替换了原来的原来倒数第二个 commit然后你可以用 rebase --continue 来继续上述 rebase 过程。git rebase --continue
所有需要重写的 commit 都修改完成后这次交互式 rebase 的过程就完美结束了。总结只修正最近的错误提交使用简单的 commit --amend 即可。若修改历史多个提交用交互式变基 rebase -i它可以在 rebase 开始之前指定一些额外操作。通过交互式变基还可以实现其它历史重写操作如“重新排序提交”、“压缩提交”、“拆分提交”等这些历史重写操作不常用我个人从来没用过所以就不讲了你可以在实际有需要的时候自己再去研究一下。-精致码农带你洞悉编程与架构↑长按图片识别二维码关注不要错过网海相遇的缘分