我是写 Java 的,经常在和另一个同事同时修改一个文件,但改的是不同的方法时,如果其中一个人提交了代码,另一个人 git pull 一定会失败
![]() | 1 ktqFDx9m2Bvfq3y4 2022-04-22 10:34:41 +08:00 你 Pull 之前没有 Commit 先? |
![]() | 2 cmdOptionKana 2022-04-22 10:36:23 +08:00 先各自开分支? |
![]() | 3 Imindzzz 2022-04-22 10:36:27 +08:00 贴出具体错误是提问的基本素质 |
![]() | 4 MoYi123 2022-04-22 10:39:01 +08:00 这不是失败, 这是让你解决冲突. |
5 dvsilch 2022-04-22 10:39:52 +08:00 先把自己的修改 commit/stash 起来,再拉取别人代码 话说这不是基本的 git 操作吗,一搜就知道了 |
![]() | 6 Gilgamesh7 2022-04-22 10:42:14 +08:00 ![]() pull 失败后,git stash -> git pull -> git stash apply ,有冲突解决一下冲突 |
![]() | 7 villivateur 2022-04-22 10:42:51 +08:00 如果搞不定 Git 的工作区、暂存区、仓库、远端这些概念,建议用 SVN ,比较简单 |
![]() | 8 Ev1s 2022-04-22 10:46:24 +08:00 这是正常的鸭 |
9 enopkf 2022-04-22 10:46:32 +08:00 用 git pull -r 更新,rebase 方式,有冲突解决冲突 |
![]() | 10 ruanimal 2022-04-22 10:53:32 +08:00 |
![]() | 11 monkeyWie 2022-04-22 11:11:02 +08:00 ![]() git stash git pull git stash pop |
![]() | 12 quxuanxuan 2022-04-22 11:18:20 +08:00 git reset 到较早的 commit git pull |
![]() | 13 Junzhou 2022-04-22 11:20:11 +08:00 ![]() 方案 1:pull 前,先把本地的 commit 了,但是一般不推荐这样做。因为你手头的活可能没做完。 方案 2:git stash ,先把当前没做完的活 stash 了,然后 pull ,pull 完,你同事的 commit 就合并进去了,这个时候,在把 stash 的内容取出来。 |
![]() | 14 itechnology OP @Chad0000 没有,我习惯先 pull ,再 commit |
![]() | 15 Felldeadbird 2022-04-22 11:43:16 +08:00 ![]() 按理来说,开发时不应该频繁同时修改同一个文件。一般我是开分支来做。管理做合并处理。这样大家都做大家的事情。完成任务后,去合并到主分支。 |
![]() | 16 fiypig 2022-04-22 11:44:42 +08:00 你先提交 ,然后拉取 ,然后合并提交 |
![]() | 17 darkengine 2022-04-22 11:50:50 +08:00 @itechnology 先不管有没有冲突,先 pull 后 commit 肯定会报错 |
18 enopkf 2022-04-22 11:52:47 +08:00 我觉得大家说的 git stash 方式更好,但我补充一下先 commit 的方式,也就是 13 楼的方案 1 1. 先把修改 commit 2. git pull -r ,rebase 方式更新,这样你的临时 commit 就是最后一个 commit (当然有冲突解决冲突) 3. git reset HEAD^ 把临时提交取消,之前修改会恢复到工作区 |
![]() | 19 unco020511 2022-04-22 11:56:31 +08:00 ![]() 1.git stash 2.git pull --rebase 3.git stash pop |
![]() | 20 ktqFDx9m2Bvfq3y4 2022-04-22 11:58:25 +08:00 @itechnology 养成先 Commit 的习惯就行,而且一般情况下你们不应该在同一个分支下工作。如果工作的内容高度依赖,那么要么定期 Merge 对方的分支到自己的里面来,要么就在同一分支下工作:即使这样也是先 Commit 再 Pull ,Commit 就是确保你修改的及时备份,不要动不动给我整没了。 这两周工作的内容就是与另外一个开发高度重叠,就在同个分支下工作的。只不过这种比较少见迫不得已为之而已。 |
![]() | 21 unco020511 2022-04-22 12:01:24 +08:00 补充一下,正常来说你一般不和同事在一个分支开发呀,当然如果是两个人开发同一个功能除外 |
![]() | 22 weichengwu 2022-04-22 12:03:00 +08:00 看一下 git 入门教程 |
![]() | 23 itechnology OP @unco020511 我和同事开发同一个页面的不同接口,我们把这些接口都写在同一个文件里面了 |
![]() | 24 msaionyc 2022-04-22 12:32:13 +08:00 via iPhone 你先明确一下“一定会失败”是什么意思,不然很难得到你想要的答案 |
25 nothingistrue 2022-04-22 12:44:19 +08:00 git 修改同一个文件,不一定总是冲突,但大概率冲突,这要看 git 能否自动将两个人的修改合并成一个。所以尽量避免修改同一个文件。 如果不能避免,那也不是啥大问题。pull 之后用新提交解决冲突,或者先 rebase 解决冲突再 push ,都可以,但是以上的前提是:**********先提交*********。 pull 失败跟冲突是两码事,本地工作空间没内容时,pull 只会产生冲突不会失败。本地工作空间有内容,并且预期还会产生冲突(实际上是 Git 无法自动解决冲突),才会 pull 失败。 使用 Git 时切记,先提交后 pull (如果暂时还不想提交就 stash ),不要像 SVN 那样先更新后提交。如果是想获取线性提交历史,那么使用 pull --rebase 即可,但本地还是要先提交。 |
![]() | 26 chiu 2022-04-22 12:56:02 +08:00 失败的错误信息是什么? |
27 zamaojava 2022-04-22 13:09:23 +08:00 idea 应该提示很好啊,从来没打过命令,idea 无脑支持。 |
![]() | 28 ClericPy 2022-04-22 14:25:07 +08:00 大项目参考一下 git flow? 十人以下的考虑 Github flow? 尽量避免不同的人开发同一个文件 /模块, 是不是底层抽象的不彻底 |
29 dddd1919 2022-04-22 14:32:18 +08:00 结对编程,一个人改 |
30 zooeymango 2022-04-22 14:35:30 +08:00 git 对比的是文件的那一行进行了修改, 虽然你觉得你们写的是不一样的代码, 但是对 git 来说你们的改动冲突了 |
![]() | 31 wolfie 2022-04-22 14:40:53 +08:00 ![]() 这水平还是用 svn 好。 |
![]() | 32 xcsoft 2022-04-22 14:43:36 +08:00 via iPhone 出现冲突了吧 |
![]() | 33 624144061 2022-04-22 15:08:36 +08:00 ![]() 都是老实人,我建议 git push -f |
34 deplivesb 2022-04-22 15:11:36 +08:00 ![]() |
35 CodeCodeStudy 2022-04-22 15:20:19 +08:00 你让他不要动 拆分大文件,每个人负责某个文件不就好了 |
![]() | 36 callv 这种协作用 git flow code review 好些 |
![]() | 37 mkmoon 2022-04-22 19:23:31 +08:00 via iPhone commit 后,也可以先 git fetch ,再在本地 git merge ,最后再 push 就行 |
38 yeqizhang 2022-04-22 21:06:11 +08:00 via Android 用 idea 用习惯的我,都是没 commit 先 pull 来合并别人的提交的 |
![]() | 39 magicls 2022-04-23 16:42:27 +08:00 push 之前先 git pull --rebase ,有冲突解冲突,解了再重新 git add; git commit 。 你要知道,git 的冲突是你一定会遇到的,一定要面对的,一定要会解的,而不是说想办法不要有冲突,如果你那样想那就错了。 |