请教一个 git 问题

2021-04-10 11:36:15 +08:00
 Newyorkcity
项目一开始处于提交 A 。此时有一些文件仅仅是被 add 还没有 commit 。
因为要坐飞机,担心笔记本电脑在颠簸过程中搞坏了硬盘,所以先 commit 了下,产生了提交 B,然后将提交 B 推送到了远程仓库。
现在尘埃落定,我希望将提交 B 从 git 历史里除去(远程仓库和本地),形成一个只有提交 A,提交 C (一个功能完整完成了的一个提交)的美丽的直线。

我本来是想在本地 --soft 回到提交 A,然后产生提交 C 后 push force 覆盖远程仓库,形成一条直线。但发现没办法强制推送覆盖远程仓库。所以来请教这种情况下,怎么操作是最合理的?谢谢。
1783 次点击
所在节点    问与答
11 条回复
revlis7
2021-04-10 11:50:44 +08:00
开个临时分支应该更方便吧,原分支 force 不上去是因为远端有其他同事的 commit 吗?
sfqtsh
2021-04-10 11:51:44 +08:00
操作并没问题。
git push --force 为何失败?
zouchtssn
2021-04-10 11:54:10 +08:00
pushf 到远程虽然世界线被拉直,但是 commit 会一直存在下去的
2wex
2021-04-10 11:54:15 +08:00
合理的做法就是把 B 永久留下
只要推送到了远程仓库,就不应该再改变

下次这种情况应该开临时分支
ayase252
2021-04-10 11:57:14 +08:00
有人在你分支上改了吧,不建议 push force,merge 回来 push 吧。
Newyorkcity
2021-04-10 12:22:05 +08:00
@revlis7
@ayase252
这就是我自己一个人写着玩的项目,不会有其他人干扰的。


@2wex 谢谢建议,学习了。
@sfqtsh 具体消息没看到,用的是 IDEA 自带的 git 工具,点击 push force 按钮发现按不下去
ClericPy
2021-04-10 12:57:18 +08:00
楼上也提过了, 这种事情要用临时分支, 正式分支别轻易提交, 后面你用到 CI/CD 相关工具会后悔养成不好的习惯的

可以看看 git flow 或者类似的东西(虽然 我更喜欢 Github flow 的分支管理, 足够简单, 原版 git flow 太复杂了, 我做的大部分东西都不会多版本共存, 滚动发布就够了), 正常情况公司里都不允许 force push 的

自己玩的话, reset --hard 然后 push --force 也能用, 但是很少有人推荐这么操作. 没完成的代码正常都在临时分支, 命名一般也是 wip 标记
Dvel
2021-04-10 13:14:22 +08:00
在终端里 push --force 就行了
jotpot
2021-04-10 15:15:13 +08:00
飞机搞坏硬盘?第一次听说
ChangQin
2021-04-11 08:08:50 +08:00
rebase HEAD 然后 push -f
msg7086
2021-04-11 10:20:28 +08:00
push force 就行了。如果没法 force push 的话去软件的设置里看看。

不要让别人的个人观点影响你。push force 这个功能既然有,就说明有其作用,只要使用得当就不会有问题。

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

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

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

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

© 2021 V2EX