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