Git只使用一个提交差异来维护同一代码的两个版本
因此,我有一个web项目,其中主机url是硬编码的,我只想不断更新一个分支,并且能够获得两个不同版本的代码,一个用于生产(服务器域),一个用于测试(本地主机) 我知道有很多方法可以通过编程实现,甚至可以通过配置文件或脚本实现。但我想知道是否可以用git实现 比如说Git只使用一个提交差异来维护同一代码的两个版本,git,Git,因此,我有一个web项目,其中主机url是硬编码的,我只想不断更新一个分支,并且能够获得两个不同版本的代码,一个用于生产(服务器域),一个用于测试(本地主机) 我知道有很多方法可以通过编程实现,甚至可以通过配置文件或脚本实现。但我想知道是否可以用git实现 比如说 master-> commit 1 -> commit 2 ..... -> HEAD localhost/branch -> commit x (where url is differ
master-> commit 1 -> commit 2 ..... -> HEAD
localhost/branch -> commit x (where url is different) -> ... -> master head
因此,在本例中,在提交2之后,localhost/branch从master签出,并添加了提交x,然后继续跟踪master的头,因此每次提交到master时都会通过快速转发更新localhost/branch
有这样的事吗 简短回答:不
快进实际上是一种标签移动方式,并且以“是祖先”属性为条件:从commit Cold移动到Cnew的标签以快进方式移动,当且仅当Cold是Cnew的祖先时(请注意,当两个提交ID相等时,标识移动可以被视为快进,或者可以完全忽略,因为它实际上不是移动)
实际上,由于提交ID的散列包含它自己的所有祖先ID,如果您的“提交x
on branchlocalhost/branch
”在分支master
的tip commit的祖先中不存在,那么添加到分支master
的任何新commit都不能是commitx
的后代,直到commitx
本身被合并。此时,您必须保持配置更改(这样master
就有了您不想要的配置更改)或放弃您的配置更改(这样master
就可以根据您的意愿进行更改)。显然,您将选择后者,但这意味着,如果将标签localhost/branch
移动到与标签master
相同的提交位置,则localhost/branch
也不会包含此配置更改
简而言之,为了合并分支,您将放弃在x
中所做的更改,并且必须合并分支以使用快进标签移动
顺便说一句,如果您正确绘制提交链,这可能更有意义。它们总是在时间上指向向后,而不是向前,并且标签指向最新的:
请注意,Cx
仍然不在master
的历史记录链中,它现在从C9
开始,返回到C1
并停止,而不包括Cx
您可以(强制)更改localhost/branch
以直接指向C9
,但如果这样做,它也不再包含Cx
如果您希望维护这类内容,您需要做的是创建一个新的合并提交(或随时间的推移创建所需的数量),将
master
分支提交缝合到localhost/branch
提交中:
C1 <- C2 ... <- C8 <-- HEAD=master
\ ... \
Cx ... C8x <-- localhost/branch
C1简短回答:否
快进实际上是一种标签移动方式,并且以“是祖先”属性为条件:从commit Cold移动到Cnew的标签以快进方式移动,当且仅当Cold是Cnew的祖先时(请注意,当两个提交ID相等时,标识移动可以被视为快进,或者可以完全忽略,因为它实际上不是移动)
实际上,由于提交ID的散列包含它自己的所有祖先ID,如果您的“提交x
on branchlocalhost/branch
”在分支master
的tip commit的祖先中不存在,那么添加到分支master
的任何新commit都不能是commitx
的后代,直到commitx
本身被合并。此时,您必须保持配置更改(这样master
就有了您不想要的配置更改)或放弃您的配置更改(这样master
就可以根据您的意愿进行更改)。显然,您将选择后者,但这意味着,如果将标签localhost/branch
移动到与标签master
相同的提交位置,则localhost/branch
也不会包含此配置更改
简而言之,为了合并分支,您将放弃在x
中所做的更改,并且必须合并分支以使用快进标签移动
顺便说一句,如果您正确绘制提交链,这可能更有意义。它们总是在时间上指向向后,而不是向前,并且标签指向最新的:
请注意,Cx
仍然不在master
的历史记录链中,它现在从C9
开始,返回到C1
并停止,而不包括Cx
您可以(强制)更改localhost/branch
以直接指向C9
,但如果这样做,它也不再包含Cx
如果您希望维护这类内容,您需要做的是创建一个新的合并提交(或随时间的推移创建所需的数量),将master
分支提交缝合到localhost/branch
提交中:
C1 <- C2 ... <- C8 <-- HEAD=master
\ ... \
Cx ... C8x <-- localhost/branch
C1简短回答:否
快进实际上是一种标签移动方式,并且以“是祖先”属性为条件:从commit Cold移动到Cnew的标签以快进方式移动,当且仅当Cold是Cnew的祖先时(请注意,当两个提交ID相等时,标识移动可以被视为快进,或者可以完全忽略,因为它实际上不是移动)
实际上,由于提交ID的散列包含它自己的所有祖先ID,如果分支localhost/branch
“提交x
”不存在于分支ma的tip提交的祖先中
C1 <- C2 ... <- C8 <-- HEAD=master
\ ... \
Cx ... C8x <-- localhost/branch
C1 <- C2 ... <- C8 <- C9 <-- HEAD=master
\ ... \ \
Cx ... C8x <- C9x <-- localhost/branch