git log 揭示以下内容:
commit 1abcd[...]
Author: [...]
Date: [...]
[Useful commit]
commit 2abcd[...]
Author: [...]
Date: [...]
Merge branch [...] of [etc. etc.]
commit 3abcd[...]
Author: [...]
Date: [...]
[Useful commit]
Run Code Online (Sandbox Code Playgroud)
那个合并提交对我来说没用 - 它不代表一个有意义的分支状态,而是从远程拉动生成的,所以我有远程历史的真实提交 - 不需要提交来标记我拉的事实.我想压缩这个合并提交.我常用的壁球技术是:
git rebase --interactive HEAD~2 (或者我需要去的远方)
然后我会把它压成邻近的提交.我做了一些这样的事情,例如我做了一个提交,意识到我错过了一个很小的重要细节(单个文件,或者没有更改其中一个文件中的一行),并做了另一个提交,基本上只是一个快速的oops.这样,当我将我的更改推回到遥控器时,一切都很干净,并且讲述了一个有凝聚力的叙述.
但是,在这种情况下,当我运行git rebase ...命令时,提交2abcd不会出现!它似乎跳过了正确的2abcd显示1abcd和3abcd.合并提交有什么特别之处可以阻止它出现git rebase --interactive吗?我可以用什么其他技术来压缩合并提交?
UPDATE每@蛋糕的要求:
输出git log --graph --oneline --decorate看起来像这样:
* 1abcd (useful commit)
* 2abcd (merge)
| \ <-- from remote …Run Code Online (Sandbox Code Playgroud) 有没有办法在另一个分支上跳过特定(冲突)提交的同时将分支重新绑定到另一个分支?
例如,我要重订mybranch到master,但主包含提交,将与主的提交冲突,所以我更愿意撤消完全提交.
-o-o-o-o-o-x-o-o-o-o master
|
o-o-o-o mybranch
Run Code Online (Sandbox Code Playgroud)
x标记冲突的提交.
我有一个全新的git repo.它有三个提交.
我想将它们挤在一起,这样我的项目历史看起来很干净,而其他人则看不到我的hacky提交.
显然没有其他人看过回购,因为它是全新的,所以改变历史不是问题.我是唯一的用户.
但是git rebase -i要我跟踪一个上游分支.在我整理git日志之前,我不想发布任何内容.
如何在不跟踪上游的情况下进行交互式rebase或压缩提交?
我的回购中有以下内容
Master---
\
Next-->Commit A.1,Commit A.2,Commit A.3 --......
Run Code Online (Sandbox Code Playgroud)
我想将A.*提交修复为一个描述特征A的提交.我试过了git rebase -i origin next,但是这没有按照我的预期工作.有没有办法实现这个?
我想创建一个分支foo,它本质上是下一个,然后在foo下面重新绑定到merge/delete foo.但是,这似乎很草率.
当我运行时git rebase -i HEAD~2,它列出了11个提交而不是2.为什么?
在此之前我所做的是:
我有以下情况:
K---L new-feature
/
H---I---J dev-team1
/
E---F---G dev-main
/
A---B---C---D master
Run Code Online (Sandbox Code Playgroud)
而且我想在dev-main分支中只移动新功能(K --- L)分支而没有(H --- I --- J)形式dev-team1
H---I---J dev-team1
/
E---F---G---K---L dev-main
/
A---B---C---D master
Run Code Online (Sandbox Code Playgroud) 我正在尝试rebase -i在我的历史中发生的一些提交.说我有这样的日志:
* 5e32fb0 (HEAD -> master) Add latest feature
* 106c31a Add new feature
* 2bdac33 Add great feature
...100 other commits...
* 64bd9e7 Add test 3
* 3e1066e Add test 2
* 26c612d Add test 1
* 694bdda Initialize repo
Run Code Online (Sandbox Code Playgroud)
我想压缩3次测试提交.在这些情况下,git rebase -i HEAD~106不是很实用.我正在寻找的是类似的东西git rebase -i 64bd9e7:26c612d.
git是否有这种行为,如果是这样,我该如何使用它?
我看过这篇文章,但它没有回答我的问题.
当我最近提交时,我犯了一个错误.(我首先忘记了"git fetch --all",然后是rebase),并且我已经提交并推送到远程分支.现在我通过先获取,解决了冲突并推送到远程分支来正确地完成了rebase.现在,似乎我最近的所有提交都出现了两次.我想做的是使用git rebase交互模式,选择我想要的所有提交,然后正确地重新绑定到提交sha代码.这是这样做的方法吗?如果我启动git rebase -i,我应该使用哪个sha代码,原始分支点sha代码?还是最新的沙码?谢谢,
大卫
当我在 git 中进行交互式 rebase时,我如何squash提交并停止edit相同的提交?