如何提交具有不同的提交ID?

时间:2017-06-09 11:25:05

标签: git

您好我有2个分支

  • 主人
  • feature_xyz

一些如何发生的事情发生在主分支和feature_xyz中的几个提交有不同的提交ID。

因此,找出与该功能真正相关的提交并不是更有可能。

我们不会挑选那些提交。

提交如何才能获得不同的提交ID? Normaly提交应该在所有分支中具有相同的id。

是否存在可能导致此问题的合并或rebase选项?

这里我尝试重现

##### simple Test Setup
git init
echo "test" > a ; git add a ; git commit -m "master commit 1"
git checkout -b feature_xyz
echo "test" > b ; git add b ; git commit -m "feature commit 1"
git checkout master
echo "test" > c ; git add c ; git commit -m "master commit 2"
git checkout feature_xyz
echo "test" > d ; git add d ; git commit -m "feature commit 2"

### Test run 1
git rebase master
# Validating by    git log master    compare to     git log feature     The commit ids are identical.


##### complex Test Setup
rm ./* ; rm .git -rf
git init
echo "test" > a ; echo "hello" >> a ; echo "World" >> a ; git add a ; git commit -m "master commit 1"
git checkout -b feature_xyz
echo "test" > b ; git add b ; git commit -m "feature commit 1"
git checkout master
sed -i -e 's/World/wOrlD/g' a ; git add a ; git commit -m "master commit 2"
git checkout feature_xyz 
sed -i -e 's/hello/HELL/g' a ; git add a ; git commit -m "feature commit 2"
########################

### Test run 2
git rebase master
git mergetool
git rebase --continue
# Validating by    git log master    compare to     git log feature     The commit ids are identical.

### Test run 3
git merge master
git mergetool
git commit
# Validating by    git log master    compare to     git log feature     The commit ids are identical.

在现实世界中,功能分支已经很久了,我不知道这种效应是如何发生的。

2 个答案:

答案 0 :(得分:1)

如果您有一个提交,则它始终具有相同的SHA值。如果以某种方式修改此提交,它将获得新的SHA值。一个rebase实际上与一个樱桃选择相同,只是以自动方式。作者,提交者,作者日期,提交者日期,更改,消息和历史记录(父提交)都是提交的SHA的一部分。如果你改变了这些变量中的任何一个e。 G。通过变基或挑选,你得到一个新的提交,其中不同的SHA恰好引入了与之前提交相同的更改。提交永远不属于任何分支,它只是某个时间点的分支的一部分。但是,由于您可以随时重新指定任何其他提交的分支指针,这可能随时发生变化。

答案 1 :(得分:1)

你写道,你没有挑选提交,但后来提到了rebase。但是,rebase基本上是表现出色的选择。那么你是否已经重新设定了这些提交?

无论如何,为了更好地了解这个问题,请检查提交中的作者和提交者字段。您可以通过命令git show -s --pretty=fuller <commit id>找到它们。你应该得到这个(从manual复制):

commit <sha1>
Author:     <author>
AuthorDate: <author date>
Commit:     <committer>
CommitDate: <committer date>
<title line>
<full commit message>

通常在cherry-pick或rebase中创建新的提交者信息,并保留作者。所以你可以找到谁和什么时候执行樱桃挑选和rebase。