我如何将最后的N承诺集成到一个承诺中?
当前回答
Anomies 答案很好,但我对此感到不安全,所以我决定添加几张屏幕截图。
步骤 0: git log
查看你在哪里与 git log. 最重要的是,找到第一个 commit 的 commit hash 你不想 squash。
此分類上一篇
步骤一:转动
在我的案例中,执行 git rebase -i(你的哈希):
$ git rebase -i 2d23ea524936e612fae1ac63c95b705db44d937d
步骤2:选择 / 切割你想要的东西
在我的情况下,我想把所有的承诺,这是第一次在时间上。 订单是从第一到最后,所以正如在 git log。 在我的情况下,我想:
此分類上一篇
步骤 3: 调整消息(s)
如果您只选出一个承诺,并解除其余的承诺,您可以调整一个承诺消息:
此分類上一篇
一旦你保存这个(:wq),你已经完成了。
其他回答
如果您正在使用 GitUp,选择您想要与其父母合并的承诺,并按下 S. 您必须为每个承诺做一次,但它比与正确的命令线引发更简单。
使用 git rebase -i <after-this-commit> 并在第二次和随后的命令中取代“squash”或“fixup”,如手册中所描述。
在此例子中, <after-this-commit> 是 SHA1 hash 或当前分支的 HEAD 的相对位置,从该分支的 Commits 被分析为 rebase 命令. 例如,如果用户希望从当前 HEAD 查看 5 个 Commits 在过去的命令是 git rebase -i HEAD~5.
在分支中,你想将承诺结合起来,运行:
git rebase -i HEAD~(n number of commits back to review)
例子:
git rebase -i HEAD~2
此将打开文本编辑器,您必须在每个承诺前更换“点击”,如果您希望这些承诺合并。
p, pick = 使用 commit
s, squash = 使用承诺,但输入前承诺
例如,如果您正在寻找将所有承诺合并到一个,则“选择”是您所做的第一个承诺,并且所有未来的承诺(位于第一个下方)都应该设置为“滑动”。如果使用vim,请使用 :x 在输入模式中保存和输出编辑器。
然后继续下调:
git add .
git rebase --continue
更多关于此和其他方式重新写下你的承诺历史,请参见这篇有用的文章
感谢这个有用的博客帖子,我发现你可以使用这个命令来破坏过去的3个任务:
git rebase -i HEAD~3
显示的文档是相当清晰的. 在任何指定线上,您可以将命令从选择到您选择的命令更改。
我做的第一件事是纠正错误,并在评论中做出新的承诺,把这一点推到我的新功能中。
接下来,我将包含修复(fe7f1e0)的承诺移动到属性承诺下方,并将选择转换为修复。
这在所有承诺都是本地的时工作得很好,但如果你试图改变已经推到远程的承诺,你真的可能会给那些已经检查过同一个分支的其他骗子带来问题!
首先,我知道我的功能分支和当前主分支之间的承诺数量。
git checkout master
git rev-list master.. --count
然后,我创建另一个基于我的功能分支的分支,保持我的功能分支无触。
最后,我跑
git checkout my-feature
git checkout -b my-rebased-feature
git checkout master
git checkout my-rebased-feature
git rebase master
git rebase head^x -i
// fixup/pick/rewrite
git push origin my-rebased-feature -f // force, if my-rebased-feature was ever pushed, otherwise no need for -f flag
// make a PR with clean history, delete both my-feature and my-rebased-feature after merge
希望能帮忙,谢谢。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别