GIT:如何在两个不同的分支机构中保持相同的提交历史

时间:2019-03-27 10:13:06

标签: git git-bash

使用gitbash合并并提交。

首先让我解释一下基本结构。这样我们就可以提取并开始工作的origin / dev。更改完成后,我们将更改推送到origin / dev。

然后使用gitbash将dev合并到qa,我在下面做

git checkout qa

# for all recent changes in origin/qa(similar have parallel origing/dev and uat as well.)
git pull

# for checking out changes in dev to my local qa space which will be merged
# to origin/qa by the below commands
git checkout dev -- directorynameToCheckoutCodeFrom

git commit
git push

因此,合并是通常在任何两个不同环境之间进行的过程。

所以我的问题是我对DEV中的5个问题进行了5次提交,所有提交都有不同的提交ID。因此,当我在1中提交所有5个更改时,从DEV合并到QA时,我得到1个提交ID,所有更改都将在1中合并。在UAT中合并时也会发生同样的情况。

有什么方法可以在不同环境之间维护相同的历史记录。真正的问题来自质量检查,我们可能会在10天之内合并4-5次,而在UAT中,我们希望保持完整并每月仅合并一次。在这种情况下,如果我们将所有从QA更改到UAT的更改作为一次提交提交,则QA中不同的历史记录将丢失。有什么办法解决吗?

在网上浏览了一些帖子,但无法理解,我了解的唯一方法就是像在DEV env中一样频繁进行提交。对于在dev> then qa>合并中的1个问题,我认为这是保存相同历史记录的唯一方法。

2 个答案:

答案 0 :(得分:1)

您可以尝试

git checkout qa

git merge dev --no-ff

git push

git merge dev --no-ff

主要用于将所有dev分支的提交及其历史记录拖到qa。

答案 1 :(得分:1)

在您描述的过程中,您想从存储库中的单个目录中“合并”更改。这与git的工作方式相反,这就是为什么您在保持良好历史方面遇到困难。

重要的是要了解您所做的并不是真正的合并[1]。合并提交有两个(或多个)父提交,这样就保留了完整的历史记录。公平地讲,git在使用某些术语时倾向于“灵活”到不一致的程度。有一些它称为“合并”的操作不会导致合并提交。但是即使使用这些操作,您也可以合并整个内容-而不是单个目录。

如果您有不同的模块(或者,尽管可以描述它们,但是它们在不同目录中的不同内容)是独立更改的(如果在分支机构/环境之间分别进行升级,则肯定适用),它们应该位于单独的存储库中。我想如果它能帮助您将它们收集为“父”存储库的子模块,从而能够从单个url或其他任何URL进行克隆。但是除此之外,如果由于某种原因不能接受这种分隔,您可能需要考虑git是否是满足特定源代码管理要求的最佳工具。


[1]我还可以争论关于合并的语义,因为如果dev和qa都发生了更改,则来自qa的更改将被覆盖并丢失-这通常不是合并所需要的。但是您可能会争辩说,更改总是从开发人员流向质量保证人员,因此不适用。而且无论如何,git有时确实将一个分支从另一个分支的破坏描述为合并(即“我们的合并策略”)。