git单个开发人员和多台机器-重新设置基础并提交两次

git单个开发人员和多台机器-重新设置基础并提交两次,git,git-rebase,Git,Git Rebase,一些背景: 我是一个单一的开发人员在一个网站上工作 我使用git进行版本控制 我有多台工作电脑:办公室、家和笔记本电脑 目前,我的服务器上有一个中心的、空的存储库。每台计算机都从该存储库克隆并将更改推送到该存储库。我目前有分支主控和分支开发。所有的工作都在开发分支中完成。Master始终是当前稳定的生产代码。可以在任何时候将更改应用于Master,以及在dev中进行的更改 我的日常工作流程包括: git checkout dev //pull in changes from remote git

一些背景:

  • 我是一个单一的开发人员在一个网站上工作
  • 我使用git进行版本控制
  • 我有多台工作电脑:办公室、家和笔记本电脑
  • 目前,我的服务器上有一个中心的、空的存储库。每台计算机都从该存储库克隆并将更改推送到该存储库。我目前有分支主控和分支开发。所有的工作都在开发分支中完成。Master始终是当前稳定的生产代码。可以在任何时候将更改应用于Master,以及在dev中进行的更改

    我的日常工作流程包括:

    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
    
    我相信对于单个开发人员来说,这应该是一个相当标准的工作流

    现在,为了我问题的目的,把所有这些都抛在脑后。我最近遇到了一种情况,我不知道如何正确处理和如何防止它在未来。目前,my dev branch是一个长期运行的开发分支,它是站点一部分的主要重写。因此,它已经开发了几个月。在我做这项工作的同时,我也对Master进行了一些小的更改/bug修复。当我完成对Master的其中一个更改时,我将dev重设到Master上以获得更改,然后将它们推送到中央回购。这一直运作良好

    然而,几天前我改成了大师,这是大约一个月来的第一次。当我去瑞贝斯时,所有的麻烦似乎都散开了。我在Master中不存在的文件上得到合并冲突,并且在相同的文件中一次又一次地得到相同的冲突。在花了一天的大部分时间试图解决所有冲突后,我终于放弃了

    今天早上,我又去尝试了一次,但在开始之前,我检查了项目提交历史,发现了一些非常奇怪的事情。我发现大约有15起犯罪行为被重复。它显示了2012年12月7日至2012年24月8日期间的所有提交。然后,我再次列出了相同的提交,所有提交都使用不同的SHA哈希。我没有注意到它,直到我看到提交的日期按时间顺序排列,正如你所预料的那样,但随后它突然又回到了过去

    为了解决这个问题,我做了另一个重基,但跳过了重复提交。当我这么做的时候,一切都像我期望的那样顺利,没有任何冲突


    所以,我要问你们的是,这些承诺是如何实现两次的,我怎样才能防止这场噩梦在未来再次发生?正如问题的标题所示,我假设这个问题与我使用的重设和推动重设分支有关。但我只是在猜测而已。我只是需要一些帮助来弄清我做错了什么。

    < P>我认为你的模型本质上和拥有三个开发人员一样,因为你有三台开发机器。因此,您的开发分支在这个意义上是共享的。我还读了一些关于作为共享分支重定基址会导致问题的文章,合并比重定共享分支的基址更好。读过这篇文章后,我开始只对私有分支使用rebase,效果很好。我建议创建一个测试存储库,并尝试这两种方法,看看它们是如何比较的

    如果我能找到另一个SO问题,我会在这里添加一个链接

    编辑:

    给你


    当然,在这个问题上有很多不同的观点。:)

    谢谢你的链接。如果我正确地理解您和链接,因为我在所有机器上的同一个分支中工作,我应该合并来自Master的更改,而不是重定基址?我是否应该担心定期合并Master的更改?或者我应该保存它,直到我准备好将dev分支合并到master中?这也是我理解该链接的方式。这不是唯一的方法,但它似乎很有效。在我使用这种方法的地方,我经常合并。我更喜欢这样,因为解决冲突更容易一些,当它是一些小冲突,而不是一个大的冲突解决,这通常是迫在眉睫的最后期限。太好了。现在,为了修复中央回购,我正在考虑从远程删除分支,然后向上推我在办公室更正的开发分支。然后,我将从其他机器上删除dev分支,并从远程机器上拆下新分支。这听起来合理吗?把旧的开发分支改名而不是删除它怎么样?确保新方法在一段时间内有效,然后稍后将其删除。而且,首先在测试回购上尝试这一点非常容易。我真的很鼓励这样做,确保方法有效以避免丢失任何东西是很重要的。