Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当多个开发人员在同一分支上工作时,是否建议使用git rebase?_Git_Version Control - Fatal编程技术网

当多个开发人员在同一分支上工作时,是否建议使用git rebase?

当多个开发人员在同一分支上工作时,是否建议使用git rebase?,git,version-control,Git,Version Control,在 建议在存储库是公共的情况下不要进行重定基址 以及最近在 建议不应在开发人员之间共享的分支上执行重基 我理解,因为开发人员可能首先合并代码,然后决定重新设置代码的基础,其他开发人员可能最终会创建多个重复的提交,正如重新设置基础的风险中所解释的那样 如果所有开发人员都达成了一个共同的协议,即每个人都将始终重新设置代码的基础,而不是合并代码,那会怎么样?该建议是否仍然适用 附言 所有这些答案使我困惑。我想我会重新提出这个问题 让我们假设有两个开发人员在两台不同的计算机上工作。有一个中央存储库。两名

建议在存储库是公共的情况下不要进行重定基址

以及最近在

建议不应在开发人员之间共享的分支上执行重基

我理解,因为开发人员可能首先合并代码,然后决定重新设置代码的基础,其他开发人员可能最终会创建多个重复的提交,正如重新设置基础的风险中所解释的那样

如果所有开发人员都达成了一个共同的协议,即每个人都将始终重新设置代码的基础,而不是合并代码,那会怎么样?该建议是否仍然适用

附言

所有这些答案使我困惑。我想我会重新提出这个问题

让我们假设有两个开发人员在两台不同的计算机上工作。有一个中央存储库。两名开发人员克隆并开始工作

开发者1:

  • 从本地/主机创建了一个分支。比如说本地/iss123
  • 把它推到远程
开发者2:

  • 从远程服务器中提取更改
  • 检查是否发送至本地/iss123
  • 在本地/iss123中进行了一些提交
  • 将更改推送到远程/iss123
开发者1:

  • 有一些本地提交
  • 他想用origin/iss123重新设置分支的基址
  • 吉特重新基准原产地/iss123
  • 然后他将其提交到origin/iss123
开发者2:

  • 有一些本地提交
  • 他将使用origin/iss123重新设置分支的基础
  • 吉特重新基准原产地/iss123
等等。开发人员1和2总是会使用origin/branch重新设置分支的基础,然后将其更改推送到origin/branch

功能稳定后,最终

开发者1:

  • 退房至本地/主
  • 从源代码/主代码提取最新代码
  • 检查本地/主机中是否有来自其他开发人员的任何提交
  • 是否将签出到本地/iss123
  • 如果有任何新的提交,将使用local/master重新设置local/iss123的基础
  • 然后,如果已完成重新基址,则将本地/iss123分支推送到远程/iss123
  • 然后将数据发送至本地/主机
  • 将本地/iss123合并到本地/master
  • 然后将本地/主机推送到原点/主机
开发者2:

  • 现在将分别从origin/master和origin/iss123拉取到local/master和local/iss123的最新更改
之后,循环再次继续


这是正确的吗?当两个开发人员在同一个分支上工作并且总是希望重新基址而不是合并时,这是正确的方法吗?

一旦代码被推送到公共存储库,那么提交就不应该发生任何更改。但当在本地存储库上重定基址时,推送是find。 例子: 我在要素分支上进行更改。然后我从feature分支的父分支(通常是develop分支)中提取。然后,我可以在develope上重新设置功能分支的基础。然后我可以将我的开发分支推到原点

因此,如果所有开发商都对其本地回购进行再定价,那么再定价,然后推动就可以了


主要的一点是,一旦一个提交或分支在公共回购上共享,就没有人可以更改、做一个重基或修改一个注释等。让我们假设没有人做一个交互式的重基、更改历史,而只是做一个
git fetch
然后再做一个
git-rebase origin/branch
。在这种情况下,如果没有其他人推动他们最近的重新基址,您将能够推动,否则您将遇到冲突,必须再次重新基址。重要的是,每个人都在努力重定基址,而且从不推-f,因为这会给下游的每个人带来问题

问题是你为什么要这么做。如果目标只是避免合并提交,则最好使用以下工作流:

  • 分支
  • 你工作吗
  • 将您的个人分支重新设置为公共分支(以防其他人犯了错误)
  • 把你的树枝推到公共树枝上
  • 如果推送因冲突而失败,请转至步骤3
  • 为下一个工作项从头开始
  • 这样,每个人总是在公共分支上以线性提交的方式提交他们的工作

    注意:保留我的原始答复,但根据更新的问题添加更多信息

    基本上,我的建议是,在
    local/iss123
    上工作的两个开发人员通过
    git pull
    来回地合并彼此的更改。一旦
    iss123
    稳定,其中一个开发人员将重新将其放在master上,即

    git checkout iss123
    git checkout -b rebase_iss123
    git rebase -i master
    // select first as edit (so you can change its commit message)
    // and select the rest as fixup
    git checkout master
    git merge rebase_iss123
    
    这将获取所有iss123,并将其压缩到主机尾部的单个提交中


    现在,开发人员可以将该母版的新发行工作分支。

    您能再详细解释一下吗?如果我错了,请纠正我。有两个开发人员在同一分支“iss123”上工作。开发人员一有一些本地提交。然后他将其与母版合并。开发人员二现在将其本地分支“iss123”与母版重新绑定,然后合并h是对master的更改。然后开发人员2创建更多提交,并再次与master合并。现在开发人员1将“iss123”重定基址,并将其更改合并到master。这里两个开发人员总是重定基址,然后合并。可以吗?好的,这里有一些术语不正确。您从未说过“推到原点”但是,由于iss123分支位于两个开发人员的本地存储库中,因此该分支不应在推送后重新设置基础。两个开发人员都可以向iss123添加提交并推送。这是否更清楚?我添加了更多描述。你能告诉我它的对错吗?我用我想要做的事情更新了描述。你能告诉我在4号之前,我会合并本地的公共分支,然后一旦你加入,就会同时推动公共分支和个人分支