6

一些背景:

  1. 我是在一个站点上工作的单一开发人员。
  2. 我正在使用 git 进行版本控制。
  3. 我有多台计算机供我工作:办公室、家里和笔记本电脑

目前,我的服务器上有一个中央的裸存储库。每台计算机都从该存储库克隆并将更改推送到该存储库。我目前有分支 Master 和分支 dev。所有工作都在 dev 分支中完成。Master 始终是最新的、稳定的生产代码。可以在任何时候将更改与 dev 中正在进行的更改一起应用于 Master。

我的日常工作流程包括:

git checkout dev
//pull in changes from remote
git pull
//make and commit changes as need throughout the day
git add -u
git commit
//these steps only happens when I know master has changed
git checkout master
git pull
git checkout dev
git rebase master //to get changes to master into dev branch
//push changes to central remote at end of day
git push

我相信这对于单个开发人员来说应该是一个相当标准的工作流程。

现在把所有这些都排除在外,就我的问题而言。我最近遇到了一种情况,我不确定如何正确处理以及将来如何防止它。目前,我的 dev 分支是一个长期运行的 dev 分支,它是对网站一部分的主要重写。因此,它已经开发了几个月。虽然我一直在做这项工作,但我也一直在对 Master 进行一些小的更改/错误修复。当我完成对 Master 的一项更改时,我将 dev 重新定位到 Master 以获取更改,然后将它们推送到中央存储库。这一直运作良好。

然而,我在几天前对Master进行了更改——大约一个月以来的第一次这样的更改。当我去 rebase 时,所有的地狱似乎都崩溃了。我在 Master 中不存在的文件上遇到合并冲突,并且我在同一个文件中一遍又一遍地遇到相同的冲突。在花了一天的大部分时间试图解决所有冲突之后,我终于放弃了。

今天早上,我再次尝试,但在开始之前,我检查了项目提交历史,发现有些奇怪。我发现大约 15 个提交被重复了。它显示了从 07/12/2012 到 08/24/2012 的所有提交。然后,我再次列出了相同的提交,都具有不同的 SHA 哈希。我没有注意到它,直到我看到提交的日期都按照您所期望的时间顺序列出,但随后它突然又跳回了过去。

为了解决这个问题,我做了另一个 rebase,但跳过了重复的提交。当我这样做时,一切都按照我的预期进行,完全没有冲突。

所以,我对你们的问题是,这些提交是如何进行两次的,我怎样才能防止这种噩梦在未来再次发生?正如问题的标题所暗示的那样,我认为问题与我使用变基和推送变基分支有关。但我真的只是在那里猜测。我只需要一些帮助来弄清楚我做错了什么。

4

1 回答 1

3

我认为您的模型本质上与拥有三个开发人员相同,因为您拥有三台开发机器。因此,您的开发分支在这个意义上是共享的。我也读过 SO 说变基为共享分支会导致问题,合并比变基共享分支更好。读完之后,我开始只对私有分支使用 rebase,效果很好。我建议创建一个测试存储库并尝试这两种方法来查看它们的比较。

如果我能找到其他 SO 问题,我将在此处添加一个链接。

编辑:

这是在 Git 中重新定位远程分支

当然,对此有很多不同的看法。:)

于 2012-09-20T17:52:48.077 回答