我如何将最后的N承诺集成到一个承诺中?
当前回答
除了其他精彩的答案之外,我还想补充一下,Git Rebase -i 如何总是让我与承诺命令混淆 - 老到新或相反? 所以这就是我的工作流:
git rebase -i HEAD~[N], N 是我想加入的命令的数量,从最新的命令开始。 所以 git rebase -i HEAD~5 意味着“将最后 5 命令分成一个新的命令”; 编辑打开,显示我想合并的命令列表。
来源和其他阅读: #1, #2。
其他回答
警告:“我的最后一个X承诺”可能是双重的。
(MASTER)
Fleetwood Mac Fritz
║ ║
Add Danny Lindsey Stevie
Kirwan Buckingham Nicks
║ ╚═══╦══════╝
Add Christine ║
Perfect Buckingham
║ Nicks
LA1974══════════╝
║
║
Bill <══════ YOU ARE EDITING HERE
Clinton (CHECKED OUT, CURRENT WORKING DIRECTORY)
在这个非常简短的历史 https://github.com/fleetwood-mac/band-history 存储库中,您已经打开了一个引用请求,将 Bill Clinton 承诺融入原始(MASTER) Fleetwood Mac 承诺中。
四个承诺:
想象任何人都不会关心阅读完整的存储库历史(实际上有一个存储库,点击上面的链接!) 你决定破坏这些承诺,所以你去运行 git reset --soft HEAD~4& git commit. 然后你 git push --force it to GitHub to clean up your PR.
你只是做了一个单一的承诺,从弗里茨到比尔·克林顿,因为你忘记了昨天你在这个项目的巴金汉尼克版本工作,而吉特日志不符合你在GitHub上看到的东西。
故事的道德
如果您不关心承诺信息的承诺之间,您可以使用
git reset --mixed <commit-hash-into-which-you-want-to-squash>
git commit -a --amend
在问题上,可以是双重的“最后”是什么意思。
* commit H0
|
* merge
|\
| * commit B0
| |
| * commit B1
| |
* | commit H1
| |
* | commit H2
|/
|
可以使用折扣,但以不同的方式,然后在其他提到的答案:
首頁 / 首頁 / 2
这将向您展示选择选项(如其他答案中提到的):
pick B1
pick B0
pick H0
pick B1
pick B0
s H0
在保存和退出后,将执行命令,然后在H1之后,这意味着它将要求你重新解决冲突(在那里,主将是H1首先,然后积累命令,当它们被应用)。
退缩结束后,您可以选择失败的 H0 和 B0 消息:
* commit squashed H0 and B0
|
* commit B1
|
* commit H1
|
* commit H2
|
P.S. 如果你只是做一些重新设置到BO:(例如,使用重新设置 - 混合,这里详细解释 https://stackoverflow.com/a/18690845/2405850):
git reset --mixed hash_of_commit_B0
git add .
git commit -m 'some commit message'
下面是另一个视觉例子,在执行后会发生什么: git rebase -i HEAD~3
此分類上一篇
來源: https://www.git-tower.com/learn/git/faq/git-squash/
简单的解决方案:
git reset --soft HEAD~5
git commit -m “委托信”
git push 起源分支 --force-with-lease
推荐文章
- 为什么调用git分支——unset-upstream来修复?
- Windows git“警告:LF将被CRLF取代”,这是警告尾巴向后吗?
- git中的哈希冲突
- git可以自动在空格和制表符之间切换吗?
- Git暂存文件列表
- 如何将git配置存储为存储库的一部分?
- 如何修改GitHub拉请求?
- 如何在Github和本地删除最后n次提交?
- 我如何调试git/git-shell相关的问题?
- 错误:无法使用rebase进行拉取:您有未分阶段的更改
- Git隐藏未缓存:如何把所有未分期的变化?
- 真实的恶魔
- 如何从另一个分支获得更改
- Git:权限被拒绝(publickey)致命-无法从远程存储库读取。克隆Git存储库时
- git reflog和log有什么区别?