简短版本:我有一个master分支,人们正在努力并承诺.然后我有一个分支master,称之为foo人们也正在努力并承诺.我想定期将一些但不是全部的变化foo带回来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"
Run Code Online (Sandbox Code Playgroud)
(从这里开始的所有讨论都假定我们正在进行master)
现在我们已经遇到了foo两个提交的情况,它master有三个提交.此时我想将第一次和第三次提交从第二次提交foo到master第二次提交.
最根本的问题是,的母公司在头部提交的foo是承诺,我不希望合并,但由于提交的父母都是犯的哈希值的部分有没有办法保存的提交的哈希值当先的foo不也造成一种情况,git branch --contains foo^对于主是真的.
举例来说,如果我这样做git merge foo,将来自合并所有提交foo给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可能永远不会按照我想要的方式工作,但如果有一些替代方式来查询历史,我没有想到,我全都听见了.
有人有主意吗?
我认为git-cherry是你正在寻找的命令.
git cherry -v master foo
Run Code Online (Sandbox Code Playgroud)
这显示了foo尚未(尚未)合并的提交master.
$ git cherry -v master foo
+ 1cffcfb1d061d308e8d33c262e30282a26b195cb Added anotherFile.txt to foo
+ fe0599190a6953c970cd3f94e18ff0c282e89e2c Added foochange.txt to foo
+ 1b548eb45ff50e59f3522ee63edd0c177e842645 Added yetAnotherFile.txt to foo
$ git cherry-pick 1cffcfb1d061d308e8d33c262e30282a26b195cb
...
$ git cherry-pick 1b548eb45ff50e59f3522ee63edd0c177e842645
...
$ git cherry -v master foo
- 1cffcfb1d061d308e8d33c262e30282a26b195cb Added anotherFile.txt to foo
+ fe0599190a6953c970cd3f94e18ff0c282e89e2c Added foochange.txt to foo
- 1b548eb45ff50e59f3522ee63edd0c177e842645 Added yetAnotherFile.txt to foo
Run Code Online (Sandbox Code Playgroud)
从手册:
已经在上游分支中具有等效变化的那些前缀带有减号( - ),而仅存在于头分支中的那些前缀带有加号(+)符号:
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |