因为 git pull 和同事闹僵了。

2019-05-18 01:48:08 +08:00
 codetnci

同事:(idea)你要先点击项目目录,右键-git-commit directory,然后右键-git-pull。理由,避免冲突,避免覆盖代码。

我: 经常是没有 commit 就 pull,而且不是用(idea)右键项目根目录来 pull,有时是用(idea)vcs 窗口中的命令行(git pull)来 pull,有时用工具栏上的 pull 按钮。理由右键项目使用 git 效率慢

被他一直说,因为我屡教不改,最后他发脾气了。

我没有 commit 就 pull 的理由如下。 1 我这边只是改动属于我自己功能的模块,代码基本在自己的 service 类里,base,commom 等方法我基本也不会去动,所以大概率不会和他的代码冲突,或者要 pull 的代码有冲突。 2 有时我代码一点改动都没有,就只剩下一两个文件,一个是我本地的 java test 类,一个是自己新建的 bean 类。我就没有 commit 直接 pull。 3 我觉得没改好的代码不好随便 commit,而且他的操作是 commit directory,(不是什么东西都 commit 上去了?) 4 (我心里想)就算是冲突或者覆盖也只会影响到我,也不会影响其他人啊?即使我的代码被覆盖或者出现冲突了,我可以回退啊(所以我心里潜台词的就是我不 commit 就更新关你毛事啊)

和同事冲突的原因: 他说他这样做避免代码冲突和覆盖,我一直不照着他说的方法去做(理由在上面),教多几次后他就受不了发脾气了。

另外: 1 他 commit 很随意,我看到他把 idea 文件夹下面的一个文件也提交了。 2 另外一个同事也很随意,很经常 git add . 然后 git commit -msg "code" 。 3 我看到过不知道是谁把 log 文件也提交上去了,更新冲突,我把我本地的 log 文件删了才 pull 成功,我在想谁那么有才啊? 4 我个人对 git 命令行不太熟,用的最多的就是 git clone。其他都是用 sourcetree 来提交和更新的。有点讨厌命令行,特别是 add 文件的时候。所以也不怎么研究命令行。 5 我在上家公司的基本上是各做各的,所以冲突不多,要合作的时候也是在同一个分支的基础上建立一个子分支,所以冲突不多。 6 我现在的情况是我们所有开发全在一个分支下工作,也没有创建个人的子分支。

想让各位评论评论,不求对错。只想知道你们的看法,求 git 正确使用方法

15561 次点击
所在节点    职场话题
80 条回复
hanxiV2EX
2019-05-18 14:16:30 +08:00
都用 git 了,还舍不得建立分支开发?
GeruzoniAnsasu
2019-05-18 15:27:14 +08:00
1L + 1

换 svn
xuanbg
2019-05-18 15:37:11 +08:00
不要 rebase,一事一 commit 比较好。一般只有在需要联调才 pull 和 push
lionseun
2019-05-18 15:47:37 +08:00
感觉是毫无意义的争论
bigjack
2019-05-18 16:14:57 +08:00
这种事也值得生气
winglight2016
2019-05-18 17:00:54 +08:00
吵架都没吵到点子上,你们的团队应该统一去培训学习一下 git 最佳实践吧。具体怎么操作是需要统一一下的,这样不是谁对谁错,而是减少不必要的问题——特别是难以解决的问题。

lz 提到“大概率”如何如何,你要知道一旦发生小概率事件,那会让你记一辈子,git 虽然很稳定,但不是没有出错的时候,一旦出错,commit 是最基本的操作单位,所以没事儿 commit 一下是很好的习惯——绝对不是做完一个任务才 commit。
hirasawayui
2019-05-18 17:20:44 +08:00
打起来打起来,
danjk159
2019-05-18 17:26:33 +08:00
还是 svn 吧
uxstone
2019-05-18 18:07:30 +08:00
以功能模块或修改 bug 为一次 commit, 一般一天下来能有个 5 到 6 个 commit

1.要 commit 前先 pull
2.commit 后就 push 远程
3.push 完, 通知其他人 pull 下代码

pull 的时候有冲突 能自动 merge 就 merge, 有冲突就 revert

还有没事别瞎 commit , commit 的信息要写清楚都干了啥
我就想说都这样做了还能有啥冲突?
demonzoo
2019-05-18 18:19:07 +08:00
我也是先 pull 再 commit push,如果有冲突的话直接 JB 里面 resolve 一下啊,很容易。。。
另外,如果互相做的功能不太相关,可以各自建 feature branch,然后最后往主分支里面 merge 就好。
sunocean
2019-05-18 19:52:33 +08:00
开个会吧, 规范流程. 这个没必要吵架.
Linxing
2019-05-18 20:15:58 +08:00
很好奇你们为什么会有这个问题 不是都是自己一个分支吗 最多 pull 下 rebase 不就好了
Lision
2019-05-18 20:17:30 +08:00
git pull --rebase
tyrealgray
2019-05-18 20:20:47 +08:00
你们不用分支的吗?争这么半天 git 的高效用法都没掌握
weizhxa
2019-05-18 21:19:53 +08:00
自己回下吧:
1、冲突原因:为什么产生冲突?如果说代码修改模块并不一样的话,那么:
a、代码的格式化不一致,这个是最容易导致大面积的 pull 下来红的原因,你们不知道有没有设置统一的代码格式化。
b、对于公共类是最容易碰到冲突的原因,说句难听话,如果你的队友修改了公共类,你又在使用旧的公共类库,那么冲突也是无可避免,他更新了代码,自然要冲突。
2、冲突解决:
a、好的习惯。
I、拉取习惯。拉取之前先看下队友的修改内容,来决定是否要完全下载,下载对于自己有什么问题,怎么解决,是否有必要这个版本下载。
II、当你修改了公共类时,最好向队友说一下,平时注意关系,多谦虚。公共类最好只扩展而不要修改原来的接口。
b、提交前的测试,基于提交的最新代码测试通过。如此即使最终的裁判,责任也不在于你。
3、后话
1、其实每个人因为性格的不一样,导致同一件事看法会有许多不同,那对于自己来说,尽量和团队成员相处好。当工作时候的冲突无可避免时,最好先私底下商量好,然后走公司路线。建议,即使工作冲突再大,也要保持私下关系良好。
2、一个 git 是否开分支或者不开分支,如何开分支,如何提交合并,如何保证最终的冲突最少,产品最可靠,亲身经历过,11 个人 5 种想法的人路过。
cqy2016
2019-05-18 21:28:24 +08:00
这根性格有毛关系,求求你们先学下 git 怎么用吧。。。
sdushn
2019-05-18 21:53:28 +08:00
@nicevar 😂😂没错啊,我也一脸懵逼,为啥都在一个分支上开发
anonym233
2019-05-18 22:02:50 +08:00
说实话,感觉你们争论的点不对,也没有把 git 的优势发挥出来。楼上说的很对,git 常用的命令就那几个,我的同事不擅长命令行的用的是 github desktop。我们项目是没有经过测试的稳定代码是不能随便推 master 的,代码冲突很正常,可以使用 vscode 进行解决冲突很方便。建议了解一下 git,毕竟 git 很强大,我用熟以后才后悔为什么没早点学 git(第一家公司是 svn).
whypool
2019-05-18 22:09:54 +08:00
git reset --hard --hard
icylogic
2019-05-18 22:17:01 +08:00
你本地怎么弄关别人什么事,只要你 push 不带 force 上去的东西保证正常不就好了。

你自己因为 pull 被覆盖了东西,是你自己的麻烦啊,你自己负责解决。只要你和远程有真正的冲突(这件事应该很少发生,应该通过流程和分支避免,的确每个团队都会有自己的习惯和解决方案,各有优劣,但放着不管所有人都在一个分支上干活是最糟糕的那种),总之你得在 pull 之前某个时间节点解决它,只不过先 commit 是让你 pull 的时候就强制你解决而已。

而且为啥你同事会知道你每次 pull 的时候发生了什么,他每天盯着你电脑看了?

我个人习惯是,准备解决冲突前(只要我和远程 diverge 了我就默认会有冲突),先 fetch+status 一下,有个心理预期。

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

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

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

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

© 2021 V2EX