Cra*_*ker 36 git branch git-branch
我用git-blame找到了一个特定的提交.现在我想找到它最初来自的分支.(从那里,我将使用分支名称来查找特定的票证)
让我们将"原始分支"定义为"在将分支合并到任何其他分支之前进行提交的分支".
hui*_*ker 41
就像其他人所说的那样,如果您要查找的分支不是您要归咎于此提交的存储库的本地(例如,仅在远程开发人员的个人存储库中的分支),您就会被搞砸.
但是假设你可以看到那些抢手的分支,当然你有提交的哈希,比方说d590f2...
,部分答案就是你能做到:
$ git branch --contains d590f2
tests
* master
Run Code Online (Sandbox Code Playgroud)
然后,只是为了确认你有罪魁祸首:
$ git rev-list tests | grep d590f2
Run Code Online (Sandbox Code Playgroud)
当然,如果d590f2
已合并到多个分支中,则必须比此更精细.
ara*_*nid 10
这在git中并不适用.分支是每个存储库的本地概念:一个人的"本地东西"分支可以与另一个人的"本地东西"分支完全分开.如果您执行某些操作,例如查看主集成分支和查询提交,以及删除两者之间的所有合并基础,您应该能够获得提交历史记录的子树,这可能会产生一些启发...或者可能不会.例如,如果你追踪从查询提交到"master"的链接,你应该希望找到合并提交和有用的注释,说明合并的来源......但是这些信息只是提供信息,而不是以某种方式记录,以便自动检索.
例如gitk some-commit...master
(几乎是短暂的gitk some-commit master --not $(git merge-base some-commit master)
)
Git分支只不过是"指向提交的命名指针"(这是一个与其他众所周知的VCS不同的基本概念).
这种情况很明显,提交A打开branch-1
,提交B branch-2
:
o A [branch-1]
|
o | B [branch-2]
| |
Run Code Online (Sandbox Code Playgroud)
合并后不清楚A(或B)最初是否打开branch-1
或branch-2
:
o [branch-1] [branch-2]
|
o merged
|\
| o A
| |
o | B
| |
Run Code Online (Sandbox Code Playgroud)
如果你有标记的A的父提交,也许你可以猜测提交A是什么Git分支,例如release-1
,你知道这个标记仅用于提交branch-1
.
o [branch-1] [branch-2]
|
o merged
|\
| o A
| |
o | B
| |
| o <release-1]
| |
Run Code Online (Sandbox Code Playgroud)
我试试,请评论,因为不完全确定,但我相信它做的工作.
仅当分支仍然指向合并到master之前的尖端时,以下内容才有效,如果分支在同一个repo上,则会出现这种情况:
o [master]
|
o merged branch "great-feature" into master
|\
| o A [great-feature]
| |
o | B
| |
Run Code Online (Sandbox Code Playgroud)
如果不是这种情况(例如,如果您从另一个回购中提取),您仍然可以手动重新创建它们.
首先获取您的提交所在的分支:
$ git branch -a --contains=<sha-of-B>
*master
great-feature
Run Code Online (Sandbox Code Playgroud)
然后为每个分支获取将其头部与提交分开的提交数:这是输出指定范围的git log的行数:
$ git log --pretty=oneline <sha-of-B>..great-feature | wc -l
1
$ git log --pretty=oneline <sha-of-B>..master | wc -l
4
Run Code Online (Sandbox Code Playgroud)
所以B离大特征最近,这意味着它是在它中创建的.
这可以做成一个很好的脚本,随意添加到答案中(我不擅长这个)
小智 5
首先确保您从远程获取了更改
$ git fetch --all
Run Code Online (Sandbox Code Playgroud)
和,
$ git branch -a --contains d590f2
Run Code Online (Sandbox Code Playgroud)
没有-a选项,您将找不到仅存在于远程分支上的提交
当您在分支上时,“原始分支”被合并到。你可以运行:
git log <SHA>..HEAD --ancestry-path --merges
Run Code Online (Sandbox Code Playgroud)
此命令将显示merge
之间的所有提交<SHA>..HEAD
。你需要最后一个。
例如,对于c0118fa
提交(最后一个),“原始分支”是redesign_interactions
* ccfd449 (HEAD -> develop) Require to return undef if no digits found
* 93dd5ff Merge pull request #4 from KES777/clean_api
|\
| * 39d82d1 Fix tc0118faests for debugging debugger internals
| * ed67179 Move &push_frame out of core
| * 2fd84b5 Do not lose info about call point
| * 3ab09a2 Improve debugger output: Show info about emitted events
| * a435005 Merge branch 'redesign_interactions' into clean_api
| |\
| | * a06cc29 Code comments
| | * d5d6266 Remove copy/paste code
| | * c0118fa Allow command to choose how continue interaction
| | * 19cb534 Emit &interact event
Run Code Online (Sandbox Code Playgroud)
你应该运行:
git log c0118fa..HEAD --ancestry-path --merges
Run Code Online (Sandbox Code Playgroud)
向下滚动找到最后一次提交。这是:
commit a435005445a6752dfe788b8d994e155b3cd9778f
Merge: 0953cac a06cc29
Author: Eugen Konkov
Date: Sat Oct 1 00:54:18 2016 +0300
Merge branch 'redesign_interactions' into clean_api
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19310 次 |
最近记录: |