如何查询git以找出哪些分支包含给定的提交?gitk通常会列出分支,除非有太多分支,在这种情况下它只是说"很多(38)"或类似的东西.我需要知道完整列表,或者至少是否某些分支包含提交.
我发现TFS中的shelve/unshelve命令非常方便且易于使用.Git中的等价物是什么?
这是TFS中的场景:
我知道有一个命令调用樱桃选择,但我不确定工作流程,是否符合需要.
在手册页中git cherry-pick:
...
-x
When recording the commit, append a line that says "(cherry picked
from commit …)" to the original commit message in order to indicate
which commit this change was cherry-picked from. ...
-r
It used to be that the command defaulted to do -x described above,
and -r was to disable it. Now the default is not to do -x so this
option is a no-op.
...
Run Code Online (Sandbox Code Playgroud)
是否有配置设置将本地默认设置为-x,并允许-r禁用它?我找不到一个,但我可能错过了它.
假设有以下提交历史,每个提交也是一个分支。
M - A - B
\
C
Run Code Online (Sandbox Code Playgroud)
然后我在 C 之上重新设置 B。我现在将拥有
M - A
\
C - A' - B'
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果提交 A,我可以“发现”A'吗?或者给定A',我可以“发现”A吗?
更具体地说,我得到了一个提交哈希 XYZ,我可以获取所有其他提交的所有提交哈希,它们是它的“重新调整版本”吗?
有没有办法确定提交是否被挑选出来以及哪个来源提交了从中挑选出来的更改?
'git cherry-pick -x'是我在选择樱桃时记录信息的解决方案.但是如果我们没有使用'-x'选项,还有其他任何解决方案吗?
当git filter-branch --tag-name-filter cat …通过使用--prune-empty和/或--subdirectory-filter=…您将进入案例重写历史记录时,标记的提交将被删除。到目前为止,这是合理的,并且按设计工作。
问题/目标
我现在想要存档的是:保留附近重写提交的标签
例子:
从...开始 A -> B(tag: foo) -> C -> D -> E
(其中 E 比 D 新,比 C 新……)
跑步git filter-branch我得到
得到A' -> B'(tag: foo)' -> E ( ^ 好案例)
或:(A' -> D' -> E' ^ 坏情况)
我想要得到的是:A'(tag: foo)' -> D' -> E'
因为A'代表了被标记的内容B
一些研究:
我遇到的第一件事是git cherry在Git 中:有没有办法找出提交是从哪里挑选出来的?但这似乎对发现差异没有太大帮助,因为树木是不相交的。
相反,我已经找到了一个有用的示例--commit-filter /sf/answers/1034837401/来写重写对象的日志
一些想法:考虑
到--commit-filter …
我想在我挑选到仓库之前确认 SHA 是否是由其他人挑选的?如何查明某人是否已经挑选了 SHA?