我们的git分支出现了一个奇怪的问题,我希望这更多是关于我们理解的问题,而不是实际存在的问题。我将尽力描述我们的工作流程,以确保我们没有错过任何明显的东西:
其中一位团队成员使用“git checkout -b newproject”创建了一个分支,然后进行了一些更改,并使用“git push -u origin newproject”推送了这些更改。然后其他开发人员加入了该项目,使用“git fetch origin”,然后使用“git checkout newproject”。
接下来,工作流程如下。开发人员进行更改,“git add”新文件和修改文件,然后定期“git commit”。然后,当他们想让其他人看到他们的更改时,他们会执行“git pull origin newproject”获取上次拉取后的任何更改,然后执行“git push -u origin newproject”。
注意:在“/etc/gitconfig”中,我们有以下内容:
通常我们在
今天早上我们注意到大量代码突然消失了。运行
还有一些提交是重复的。另一个需要注意的是,其中一位开发人员提到,当他们看到一些冲突并解决了它们,然后运行
更新:我们注意到问题比最初想象的要更容易解释。直到包括将其提交推送到提交
为了更好地说明这一点,我提供以下内容:
其中一位团队成员使用“git checkout -b newproject”创建了一个分支,然后进行了一些更改,并使用“git push -u origin newproject”推送了这些更改。然后其他开发人员加入了该项目,使用“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
时,我们注意到它不是按照时间顺序排列的,就像手册所建议的那样。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
时,他们会显示另一个冲突列表。在所有问题都得到解决之前,这种情况发生了几次,才能进行推送。更新:我们注意到问题比最初想象的要更容易解释。直到包括将其提交推送到提交
01b3bfb3c20f74ea437b221711deabc970f670d8
,日期为Fri Sep 12 08:45:19 2014 +0100
,一切都是正确的。它按时间顺序排列,代码也是正确的。接下来由进行的下3个提交实际上是我刚才提到的提交之前的同样3个提交,并在推送其更改时添加。因此,它们是的提交,但以某种方式被重新添加。还要注意最后一个提交没有被重新添加,这似乎是大部分问题的根源。为了更好地说明这一点,我提供以下内容:
87e9a4e Add sectionGroup.html to templates_safelincs
bc0903f Add responsive skin to sectionProducts
7833850 Rewrite the way breadcrumbs are generated and output to the page
09d1318 Fix styles for video and featured product boxes, fix miscellaneous bugs and remove obselete code
13f0164 Fix section.html, add featured products, star buy products and product videos
01b3bfb Refine code for breadcrumbs
0303bae Modify getBreadcrumbTrail so that it attempts to take the correct route when recursing
1ae5f00 Rewrite the way breadcrumbs are generated and output to the page
2cc0525 Fix styles for video and featured product boxes, fix miscellaneous bugs and remove obselete code
cc3c86b Fix section.html, add featured products, star buy products and product videos
有人能解释一下我们在这里做错了什么吗?
git rebase
时,您会复制提交记录(然后放弃原始提交记录,转而使用新的副本)。如果您只重新定义自己的未推送提交记录,则没有其他人拥有您的旧版本,但是如果您以某种方式重新定义了其他人的(已推送/已发布)提交记录,则也会复制他们的提交记录。这几乎肯定就是发生的事情。为了将两个副本都记录在历史记录中,您可以将您的副本与他们的副本合并(这将显示在--graph
输出或 gitk 等工具中)。 - torek--graph
输出只显示一条线性路径。 - LeonardChallisgit mergetool
? - akgillrebase
有一些很好的阅读内容,应该能够澄清这一点。 - Adam Glauser