公司刚用 git,还不太会用,请教下怎么合并代码

2020-11-25 10:19:31 +08:00
 darknoll

公司原来都是用 svn 的,现在刚改成用 git

现在有一个 master 分支,然后每个人都有自己的分支

每个人开发的时候,最开始是从 master 上拉取代码到自己的分支,比如 A:master->A-dev; B:master->B-dev

现在两个人同时开发自己的部分,最后都要合并到 master,A 先提交,那么 A 直接合并到了 master,然后 B 提交,B 是不是要先把 master 的代码 pull 下合并?

都是这样的工作流程吗?

12218 次点击
所在节点    程序员
81 条回复
BrookO
2020-11-26 09:04:24 +08:00
百度一分钟,进群两小时
itsql
2020-11-26 09:26:01 +08:00
@manzhiyong 反了吧,不是应该先 pull,否则 commit 不上?
youmilk
2020-11-26 09:27:38 +08:00
先 commit,(不然本地代码有概率被覆盖) 再 pull/merge/rebase
cyrivlclth
2020-11-26 09:35:18 +08:00
贵司没有制定 git 工作流吗?
owenzhang24
2020-11-26 09:43:53 +08:00
faceRollingKB
2020-11-26 09:49:43 +08:00
举例:A 合并代码
master 拉最新代码
master 合并到 A-dev
处理冲突并 commit
A-dev 合并到 master (这一步将会使用 fastforward 合并,只更新 master 引用不合并代码)
推送 master
faceRollingKB
2020-11-26 09:51:39 +08:00
@binbinbbb rebase 有风险,git 官方文档建议不要用,最好正常 merge 处理冲突
floyda
2020-11-26 09:51:44 +08:00
你们居然不是在 develop 分支上合并代码?
看来你们的负责人对 git 也是一知半解啊:)

推荐使用 Sublime Merge, 在 B 站上可以搜到我录制的一些简单教程.
在了解 Git 的基本知识之后, 用 SM 比用命令行更容易上手 Git
fhsan
2020-11-26 09:54:49 +08:00
faceRollingKB
2020-11-26 09:57:00 +08:00
@kingfalse 最好不要一个分支开发,时不时就要处理冲突,git 分支管理是很便捷的,每个人自己搞个分支玩最方便
fish0223
2020-11-26 10:09:57 +08:00
如果 A 和 B 要共同开发一个项目,那么最好的办法是新建一个远端分支,因为 master 分支是总分支,最好不要用来测试,一般都是用来提交最终版的,所以你们应该用如下姿势:
1.A 先从 master 拉取分支:git checkout master => git pull --rebase => git checkout -b branch_a
2.让 A 把它的分支提交到远端 git push origin branch_a:branch_a (使用 git branch -r 看是否已经提交到远端)
3.B 拉取 A 的代码,git fetch => git checkout -b branch_b origin/branch_a
4.这样,A 和 B 就在共用远端的 branch_a 的分支了,你们提交合并都能看到对方的代码,没有问题之后再由 A 或 B 处理完冲突后,合并到 master:
git checkout master => git pull --rebase => git merge branch_a
这样就完成啦。。。
manzhiyong
2020-11-26 10:13:07 +08:00
@itsql 本地分支的话,切回 master 会把变化的文件带到 master,a 先提交的如果和 b 的有重叠部分,会导致 pull 不下来,先 commit 一下,可以避免这种情况。
drydiy
2020-11-26 10:16:20 +08:00
提供你一个方法:
1 、每个人都从 master 创建新的个人开发分支。
2 、从 master 创建一个远程分支:pre-master 什么的都可以。
3 、每个人从合代码到 pre-master 。有冲突就解决冲突。
4 、最后 pre-master 没问题后,再将远程分支 pre-master 合到 master
f6x
2020-11-26 10:20:03 +08:00
@drydiy 这个 pre-master 有个更国际通用的名字: dev
drydiy
2020-11-26 10:25:03 +08:00
@f6x #74
不对。dev 用于开发环境,test 用于测试环境。还有验收环境、预发布环境、灰度等等划分。
dev 、test 等等分支的代码不一定会在本次发版上线。所以 dev 是不可以直接 mr 到 master 分支的。
所以 pre-master 的作用是:所有要本次发版上线的需求分支,都先合并到这里,在这个分支确认无误后,可以直接合到 master 。
所以,这样会产生一个问题,就是当时间长了后,dev/test 等分支跟 master 分支代码冲突会很多。所以需要定期将 master 合到 dev/test 等。或者直接重建 dev/test 等分支。
way2explore2
2020-11-26 11:57:28 +08:00
你们,都在误人子弟。正确的合并方法是。

1. 以 zip 包形式把源代码下载,
2. 解压缩,
3. 然后 IDE 多开,一个打开你的,一个打开远端的,
4. 就这样一行一行对比,遇到冲突,自己手动修改。
5. 最后 git push -f




用工具什么的都弱爆了! :)

只有手动合并才有匠人精神。

谁说程序员是农民工,谁说程序员善于运用工具,我们是匠人,我们是艺术家。

一电锅炖了 2 个小时的佛跳墙怎么能和一锅柴火炖 20 小时的一样!


---
我就编到这里了。……
chinafu
2020-11-26 13:14:26 +08:00
这个有点像 WIN 系统的移动复制和粘贴,,,需要比较合并...
ericshen
2020-11-26 14:03:46 +08:00
@flywith24 国区访问速度慢的话可以用码云的镜像 https://oschina.gitee.io/learn-git-branching/
nevermlnd
2020-11-26 14:07:04 +08:00
⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛
⬛⬛⬛⬛⬛⬛⬛⬛

(手机坏了?,不是,点赞自动显示隐藏部分 :-)
overthemoon
2020-11-26 14:12:09 +08:00
常用:
git init 初始化本地文件夹仓库
git clone https://github.com/××× 把远程仓库代码复制一遍到 git init 之后的文件夹里面

本地文件夹里面有了远程仓库的代码后,并且你写完代码要提交的时候:
1.git pull 更新远程仓库(有时候可能有冲突可以再次之前 git stash 一下,意思是把你写的代码先保存)
2.git stash pop 把你刚才存起来的自己写得代码再从缓存里面拿出来,对比下差异
3.git add . 把你写的所有代码先提交到 inex 区
3.git commit -m "备注" 进一步吧代码提交到 repository 区
4.git push origin master 真正的推送到远程仓库

其它:
查看配置 git config --list

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

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

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

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

© 2021 V2EX