1
whahuzhihao 2018 年 10 月 8 日
git rebase -i origin/master
然后把不要的 commit squash 掉 |
2
tsl0922 2018 年 10 月 8 日 via iPhone
git push origin efgh5678:master
|
3
terence4444 2018 年 10 月 8 日 via iPhone
最好 cherry pick 出来做个新的 branch
|
4
WuwuGin 2018 年 10 月 8 日
所以说修 bug 为什么不新开 branch。
|
5
wingoo 2018 年 10 月 8 日
cherry pick 出来就行了
|
6
pagxir 2018 年 10 月 8 日
答案是,做不到。因为每个 commit 都是对应一个完整的版本,所以 efgh5678 自然是包含 abcd1234 的提交,如果你 push 了 efgh5678 比如包含这个完整的版本。前面的 1 ~ 5 楼的回答都是错误的。
当然了,正确的流程是在 bugfix 分支上进行 bugfix,feature 分支开发 feature,然后进行分支的 merge。反正 git 的分支是轻量分支,又不浪费什么。 |
7
newtype0092 2018 年 10 月 8 日
@pagxir 我们就是多人共用分支的工作流,git 没有什么正确的流程,因为各个团队的分工合作方式都不一样,只有最适合团队的工作流。
这种情况你需要将两个 commit 交换顺序,让 abcd1234 变成最后一个提交,efgh5678 变成倒数第二个提交,然后只 push 到倒数第二个提交。 具体操作方式就是用交互式 rebase,就是 1 楼到 rebase -i,默认会对你没有 push 到远程到这两个提交操作,将两个 commit 对应信息的行交换顺序,然后保存,两个 commit 的顺序就会调换。 然后用 2 楼的方式,只 push efgh5678 到远程就好楼。 |
8
azh7138m 2018 年 10 月 8 日 via Android
@newtype0092 共用开发分支没问题,楼主是在开发分支修 bug,这个就有问题了
|
9
pagxir 2018 年 10 月 8 日
@newtype0092 你这个做,严格来说不是 commit 顺序调换,而是生成了两个新的 commit,只是 commit 的产生的差分文件跟原来的 commit 大致一致。
|
10
swulling 2018 年 10 月 8 日
正确答案:Rebase 交换 commit 顺序,然后指定 commit id push
最佳实践:每个 feature/bugfix 都是一个单独的本地分支,都往同一个远程分支 push,push 前用 rebase 同步远程分支即可 正确答案往往不是最佳实践,git 的特性就是轻量级的本地分支,如果不爱用,无疑是浪费了 git 最大的特性 |
12
newtype0092 2018 年 10 月 9 日
@azh7138m 感觉楼主的开发分支可能就是 dev 分支,不是 feature 分支,所以各种操作都在这个分支搞吧。。。
|
13
newtype0092 2018 年 10 月 9 日
@pagxir 这两个所谓的新的 commit 对实际情况来说并没有什么影响吧,毕竟都是本地的 commit,id 也一样,只要不是之前手动发过 patch 给别人,可以说和原来一样吧。
|
14
pagxir 2018 年 10 月 9 日 via Android
@newtype0092 ID 哪里一样了。不一样的,如果一样说明就是一个 commit。
|
15
newtype0092 2018 年 10 月 9 日
@pagxir 啊,是会生成一个新 id,我好像从来没注意过。。。
|