本地有两个 commit,如何只 push 最新的那个 commit

2018-10-08 18:38:04 +08:00
 FenGuWu
比如开发的时候遇到了测试提线上 BUG。我可以先把手头开发的内容提一次 commit: abcd1234
然后修复 BUG 的内容提一次 commit: efgh5678。
不切换分支,不 stash 的情况下怎么把 efgh5678 提交上去,而不会吧 abcd1234 连带上去。
7520 次点击
所在节点    git
15 条回复
whahuzhihao
2018-10-08 18:45:44 +08:00
git rebase -i origin/master
然后把不要的 commit squash 掉
tsl0922
2018-10-08 19:31:35 +08:00
git push origin efgh5678:master
terence4444
2018-10-08 19:40:11 +08:00
最好 cherry pick 出来做个新的 branch
WuwuGin
2018-10-08 19:40:57 +08:00
所以说修 bug 为什么不新开 branch。
wingoo
2018-10-08 20:42:47 +08:00
cherry pick 出来就行了
pagxir
2018-10-08 23:09:01 +08:00
答案是,做不到。因为每个 commit 都是对应一个完整的版本,所以 efgh5678 自然是包含 abcd1234 的提交,如果你 push 了 efgh5678 比如包含这个完整的版本。前面的 1 ~ 5 楼的回答都是错误的。
当然了,正确的流程是在 bugfix 分支上进行 bugfix,feature 分支开发 feature,然后进行分支的 merge。反正 git 的分支是轻量分支,又不浪费什么。
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 到远程就好楼。
azh7138m
2018-10-08 23:37:02 +08:00
@newtype0092 共用开发分支没问题,楼主是在开发分支修 bug,这个就有问题了
pagxir
2018-10-08 23:42:18 +08:00
@newtype0092 你这个做,严格来说不是 commit 顺序调换,而是生成了两个新的 commit,只是 commit 的产生的差分文件跟原来的 commit 大致一致。
swulling
2018-10-08 23:42:26 +08:00
正确答案:Rebase 交换 commit 顺序,然后指定 commit id push
最佳实践:每个 feature/bugfix 都是一个单独的本地分支,都往同一个远程分支 push,push 前用 rebase 同步远程分支即可


正确答案往往不是最佳实践,git 的特性就是轻量级的本地分支,如果不爱用,无疑是浪费了 git 最大的特性
swulling
2018-10-08 23:43:23 +08:00
@pagxir 没有 push 的 commit 修改很正常,没有任何方法可以在不修改 commit 的情况下满足 lz 的需求
newtype0092
2018-10-09 00:29:19 +08:00
@azh7138m 感觉楼主的开发分支可能就是 dev 分支,不是 feature 分支,所以各种操作都在这个分支搞吧。。。
newtype0092
2018-10-09 00:33:11 +08:00
@pagxir 这两个所谓的新的 commit 对实际情况来说并没有什么影响吧,毕竟都是本地的 commit,id 也一样,只要不是之前手动发过 patch 给别人,可以说和原来一样吧。
pagxir
2018-10-09 01:28:34 +08:00
@newtype0092 ID 哪里一样了。不一样的,如果一样说明就是一个 commit。
newtype0092
2018-10-09 11:30:26 +08:00
@pagxir 啊,是会生成一个新 id,我好像从来没注意过。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/495695

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX