新鸟入职,请教老哥们三个关于 git 的问题!感谢!

2019-06-30 12:01:03 +08:00
 WhoCanBeRich
三个问题哈~
1、lz 平时写项目写项目都喜欢用 rebase,因为这样到时候追 bug 的时候可以将多条 commit 的记录翻出来修,但是公司比较推荐用 merge,这样别人看你的提交只会是一条 commit,比较简洁。
2、刚入职我操作公司的 git 总是会出现一些问题,总让自己的 mentor 帮忙解决非常不好意思,顺便也问一下老哥们我下面的这样的操作 git 的方式 OK 吗,会不会存在什么潜在的问题?
-->[trunk_myself](我自己的分支):
git fetch
git rebase origin/company_trunk
[出现冲突:开始修冲突]
git add 冲突文件
git rebase --continue
git add .
git commit -m 'xxx'
-->[company_trunk](公司的分支):
git co company_trunk
git rebase trunk_myself
git st
[Your branch is ahead of 'origin/company_trunk'
[编译,防止合并代码的时候有人提交新的代码]
git fetch
git rebase
[查看 sourceTree 节点是否正常]
git push
3、如果用 merge 的话,直接把上面的'rebase'替换成'merge'会不会出现什么问题呢?
2002 次点击
所在节点    问与答
23 条回复
iConsLii
2019-06-30 13:16:40 +08:00
1、公司的项目跟着公司规定走吧
iConsLii
2019-06-30 13:18:35 +08:00
@iConsLii
2、用 rebase 的话,会导致 commit log 流失或者顺序错乱的吧
3、不会出现什么问题
leo108
2019-06-30 13:41:42 +08:00
你自己的分支怎么 rebase 都无所谓,但是公共的分支(比如你说的 company_trunk )执行 rebase 操作的话……没被同事打死真是幸运呢。
Xbluer
2019-06-30 14:09:43 +08:00
@iConsLii #2 rebase 会丢失一些信息,但不是 commit log。另外顺序错乱也不会啊。

@leo108 #3 rebase 的时候不要变更已经发布到服务器上的提交不会有问题,而且服务器上一般都可以控制禁止 force push。
WhoCanBeRich
2019-06-30 14:53:12 +08:00
@iConsLii 好的 谢谢老哥!
WhoCanBeRich
2019-06-30 14:53:42 +08:00
@leo108 好的哈哈 那我还是用 merge 啦 谢谢你啦 :)
WhoCanBeRich
2019-06-30 14:53:51 +08:00
@Xbluer 好的 谢谢你啦!
ColinZeb
2019-06-30 14:53:52 +08:00
@leo108 Rebase 也是一种推送方式,不只是分支合并用的
leo108
2019-06-30 15:56:54 +08:00
@Xbluer 在公共分支执行了 rebase 之后又不 force push ?那这个操作的意义何在?


@ColinZeb 你确定 rebase 是一种「推送」方式?
Xbluer
2019-06-30 16:43:58 +08:00
@leo108 #9 比如说本地分支 feature/abc 跟踪远程分支 origin/feature/abc。 在本地 feature/abc 上直接开发并提交到本地,执行 pull --rebase 可以将本地修改的内容在最新的 origin/feature/abc 最新的版本上衍合,然后执行 push 操作就可以,并不需要 push --force。 提交日志只有一条直线,所有开发者的开发活动像是依次顺序完成的,简洁明了。
wsxyeah
2019-06-30 18:45:59 +08:00
你的 company_trunk 是指 develop,master 这类分支?这类通常会设为 protected branch,是不允许 push 的,只能通过 mr 合进去。
你自己的 feature 分支当然可以 rebase。
ColinZeb
2019-06-30 20:42:46 +08:00
@leo108 git fetch -> git rebase(这里的是未推送的提交 rebase 到 head 上)-> git push
leo108
2019-07-01 07:15:55 +08:00
@Xbluer 你仔细看楼主贴的操作记录,是在 company_trunk rebase 了自己的分支,这种情况必然需要 force push。
leo108
2019-07-01 07:28:13 +08:00
@leo108 #13 除非楼主之前本地的 company_trunk 与远端的一致
WhoCanBeRich
2019-07-01 09:49:24 +08:00
@leo108 应该不用 force push 吧,我已经 git fetch 过了,也就是本地的 company_trunk 与远端的一致了
leo108
2019-07-01 09:51:56 +08:00
@WhoCanBeRich 这个就是时间差问题了,假如你在处理冲突时花了较多的时间,那么就有可能出现别人 push 了新的 commit 到远端分支。
你的方法可能在大多数时候是可行的,但不代表这是一个正确的方法,
WhoCanBeRich
2019-07-01 10:01:22 +08:00
@leo108 是 所以我也说[编译,防止合并代码的时候有人提交新的代码]哈
WhoCanBeRich
2019-07-01 10:02:18 +08:00
@leo108 你有什么建议可以让我完全避免这种潜在问题嘛 (除了 force push..如果 force 我会被打死的
leo108
2019-07-01 10:18:32 +08:00
@WhoCanBeRich 如果对 rebase 理解不够到位,建议还是用 merge 吧。
WhoCanBeRich
2019-07-01 10:44:01 +08:00
@leo108 但是用 merge 也会存在你说的这个问题呀:"这个就是时间差问题了,假如你在处理冲突时花了较多的时间,那么就有可能出现别人 push 了新的 commit 到远端分支。"

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

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

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

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

© 2021 V2EX