我们的git分支有一个奇怪的问题,我希望更多的是关于我们的理解,而不是问题。我将尽我所能来描述我们的工作流程,以确保我们不会错过任何明显的东西:
其中一个团队使用git checkout -b newproject
创建了一个分支,然后进行了一些更改,然后使用git push -u origin new project
推送了这些更改。然后其他开发人员使用git fetch origin
然后git checkout newproject
加入项目。
接下来,工作流程如下。开发人员定期更改git add
新文件和修改后的文件以及git commit
。然后,当他们希望其他人看到他们的更改时,他们会执行git pull origin newproject
以获得自上次拉取后的任何更改,然后是git push -u origin newproject
。
注意:在/etc/gitconfig
我们有以下内容:
[branch]
autosetuprebase = always
我们在pull
时经常会遇到冲突,因为我们正在处理相同的文件。当我们这样做时,我们得到手动解决冲突的指令然后运行git rebase --continue
我们打开文件,选择我们想要保留的代码并进行必要的更改并保存。然后,我们git add filename.ext
解决问题后,再运行git rebase --continue
。完成此操作后,git status
在newproject
分支上显示没有更改,并且在X提交之前,我们使用git push -u origin newproject
。
今天早上我们注意到大量的代码突然丢失了。运行git log
时,我们注意到的第一件事是它没有按时间顺序排列as the manual suggests。
commit bc0903fc5795425908f335cebcab11055869d75d
Author: billy <billy@our.biz>
Date: Thu Sep 11 15:29:37 2014 +0100
Add responsive skin to sectionProducts
commit 7833850313c2974c3b8cbc75383b1834fbf4bf93
Author: bob <bob@our.biz>
Date: Thu Sep 11 14:44:37 2014 +0100
Rewrite the way breadcrumbs are generated and output to the page
commit 09d1318d9e7249e9e45826d7ddc33f23fc5974b1
Author: bob <bob@our.biz>
Date: Thu Sep 11 11:25:21 2014 +0100
Fix styles for video and featured product boxes, fix miscellaneous bugs and remove obselete code
commit 13f01644935092b490be55b6738f500f0f5fcb2e
Author: bob <bob@our.biz>
Date: Thu Sep 11 08:31:03 2014 +0100
Fix section.html, add featured products, star buy products and product videos
commit 01b3bfb3c20f74ea437b221711deabc970f670d8
Author: bob <bob@our.biz>
Date: Fri Sep 12 08:45:19 2014 +0100
Refine code for breadcrumbs
commit 0303bae79f7ff2e84221e0db3f88d3630d4afa91
Author: bob <bob@our.biz>
Date: Thu Sep 11 15:53:06 2014 +0100
Modify getBreadcrumbTrail so that it attempts to take the correct route when recursing
commit 1ae5f00814bf216eda5449a6e8d89123b124fad8
Author: bob <bob@our.biz>
Date: Thu Sep 11 14:44:37 2014 +0100
Rewrite the way breadcrumbs are generated and output to the page
一些提交也会重复出现。另一点值得注意的是,其中一位开发人员提到当他们看到一些冲突并解决它们,然后运行git rebase --continue
时,他们会看到另一个冲突列表。在他们全部解决之前,这种情况发生了几次,然后才能推动。
更新:我们注意到这些问题最初可以解释得更容易解释。直到 bob 推送他的提交,直到提交日期01b3bfb3c20f74ea437b221711deabc970f670d8
的{{1}},一切都正确。它是按时间顺序排列的,代码是正确的。接下来的3次提交 bob 实际上是在我刚刚提到的提交之前提交的3次提交,并在 billy 推送他的更改时添加。所以,他们是 bob 的提交,但不知何故由 billy 重新添加。还要注意最终提交没有重新添加,这是大部分问题似乎源于此的地方。
对于插画家来说,这更好一点,我提出以下内容:
Fri Sep 12 08:45:19 2014 +0100
有谁能解释我们在这里做错了什么?
答案 0 :(得分:1)
为了完整起见,我将在此处发布原因。
简单地说,我们正在重写公共历史which is bad。我们现在做的 只是从master到我们的功能分支的rebase,当它与我们自己的提交应用于头部时,我们然后合并到master。实际上,我们也开始压制这些提交。即使我们可能在几周前做出初步提交。
答案 1 :(得分:0)
我认为这个序列会产生你所看到的图形:
cc3^
pull --rebase
他的工作在他们之上,但决定不推动任何东西cc3
,2cc
和1ae
作为新的a,b,c,并继续030
和01b
。cc3^
pull --rebase
。所以a,b,c和另外两个提交被重新定位到01b
,获得13f
,09d
,783
作为他最新版本的Bob的原始版本a,b, c和他自己的bc0
和87e
。答案 2 :(得分:0)
请参阅git reflog show
命令。它帮助我恢复了本地提交。