当我读git rebase doc时出现了我的问题,
如果上游分支已经包含您所做的更改(例如, 因为您邮寄了在上游应用的补丁),那么 提交将被跳过。例如,在 以下历史记录(其中A'和A引入了相同的一组 更改,但提交者信息不同):
A---B---C topic / D---E---A'---F master will result in: B'---C' topic / D---E---A'---F master
一种方法是使用git patch-id查看补丁ID,但这不是我想要的。
让我有2个分支。主题和主文件,我只更改其中的一个文件。
Inserted 2 -> T2 M2 <-- Inserted 2 in new line
| |
Inserted 1 -> T1 M3 <-- Inserted 3 in new line
\ /
\ /
* <-- Contents similar here
现在在T2和M2处,虽然我们在文件的两个版本的同一行中添加2
,但补丁并不相同(发现这是git patch-id)。这个发现令我惊讶。我认为,如果将同一行中的相同内容应用于文件的2个不同版本,补丁将是相同的。
这使我认为该补丁程序也因此取决于我在其中应用补丁程序的上一次提交。那么,当我们说(某个分支上的patch1)=(其他分支上的patch2)时,那么他们的祖先也需要相同吗?如果是,我们可以递归地应用它,并且两个分支将完全相同,这是不合逻辑的。
所以,我的问题是,什么时候说2个补丁相等(不考虑patch-id)?
使用此脚本在本地复制以上内容:
#!/bin/bash
git init .
echo "10" >> 1.txt && git add . && git commit -m "1"
# Add 2 commits to master
echo "3" >> 1.txt && git commit -am "m3"
echo "2" >> 1.txt && git commit -am "m2"
#checkout topic branch
git checkout -b topic HEAD~2
echo "1" >> 1.txt && git commit -am "t1"
echo "2" >> 1.txt && git commit -am "t2"
#Show graph
git log --oneline --all --decorate --graph