简短版本:我有一个master
分支,人们正在努力并致力于。然后我有一个分支master
,称之为foo
人们也在努力并致力于的分支。定期,我想带来一些,但不是全部,从foo
back 到master
. 我希望通过某种方式master
来查询历史记录的存在和不存在foo
。这似乎有问题。我该怎么做呢?
长版:创建一个示例 git repo,如下所示:
cd /tmp && mkdir gitrepo && cd gitrepo/ && git init
echo "Something shared" > myFile.txt && git add myFile.txt && git commit -m "Added myFile.txt to master"
git checkout -b foo master
echo "Something else shared" > anotherFile.txt && git add anotherFile.txt && git commit -m "Added anotherFile.txt to foo"
echo "Something specific to foo" > foochange.txt && git add foochange.txt && git commit -m "Added foochange.txt to foo"
echo "Something else shared again" > yetAnotherFile.txt && git add yetAnotherFile.txt && git commit -m "Added yetAnotherFile.txt to foo"
git checkout master
echo "Something specific to master" > masterchange.txt && git add masterchange.txt && git commit -m "Added masterchange.txt to master"
echo "Specific to master" > masterchange.txt && git add masterchange.txt && git commit -m "Added masterchange.txt on master"
(从这里开始的所有讨论都假设我们在master
)
现在我们遇到了foo
两个提交落后master
并且自己有三个提交的情况。在这一点上,我想将第一个和第三个提交从foo
tomaster
但不是第二个带回。
根本问题是,提交的父级foo
是我不想合并的提交,但是由于提交的父级是该提交的哈希的一部分,因此无法保留头部提交的哈希也foo
没有创造一个git branch --contains foo^
对主人来说是真实的情况。
例如,如果我这样做git merge foo
了,它将合并所有从foo
to的提交master
。在这样做之后,我可以git branch --contains foo^
说它会说两者foo
并master
包含该提交。然后我尝试做一个git revert foo^
但git branch --contains foo^
仍然报告master
包含foo^
.
如果我git cherry-pick foo foo^^
有两个相关的修订,那么我有来自foo
应用的这两个修订的差异的更改master
,但git branch --contains foo^
说只有分支foo
包含该提交。
我在这里尝试实现的是某种查询历史记录的方法(无需手动关联存储为提交消息中的文本的哈希),因此我可以查看哪些提交已合并到主控中,哪些尚未合并到主控中。如前所述,我知道几种方法可以让 master 的状态与我想要的一样(cherry-pick、merge+revert、format-patch/am、diff/patch 等)我正在寻找的是某种方式来查询我需要的信息的历史记录。我知道这git branch --contains
可能永远不会以我想要的方式工作,但如果有一些替代方法来查询历史,我没有想到,我全神贯注。
有人有想法么?