如何解决如何确定特定分支的源分支?
| 我在git中有一个分支,想弄清楚它最初是从哪个分支分支出来的,在什么时候提交的。 Github似乎知道,因为当您执行拉取请求时,它通常会自动设置它应该进入的分支,但是我无法从命令行中手动确定如何执行此操作。 让我添加一个具体的例子:master -- ongoing development
2.2 -- stable maintenance
创建了一个特征分支feature
(在下面的提交B
处)并进行了处理(B\'
,C\'
和E\'
),并与源分支合并以拾取C
和D
feature branch: B\'-C\'-C--D--E\'
/ /
source branch: A--B--C--D--E-- ...
现在,我想将feature
合并回其源中,但是我不确定它最初是master
还是2.2
的分支。为了将特征合并到正确的源中,是否有一种编程方式来找出源分支是ѭ10还是ѭ11?
解决方法
Git仅跟踪单个存储库中的“上游”信息,并且该信息不是静态的,也不在同一存储库的单独克隆之间共享。
从命令行设置此关系的命令是:
git branch --set-upstream <branch> [<start-point>]
查看git-diff的输出可能会为您提供一个线索:
git diff <mybranch>..master # commits in master that are not in mybranch
git diff <mybranch>..2.2 # commits in 2.2 that are not in mybranch
列出的提交次数较少的分支很可能是分支点(但是显然不能保证。
您还可以使用gitk或git log进行浏览:
gitk --all
git log --graph --color --decorate --oneline --all
, git show-branch [--all]
git merge-base
第一个将显示您的分支并为您提供合并信息。第二个将帮助您了解两个特定分支(上次分支的位置)之间的关系。
, git branch -r
使用--contains,仅显示包含命名提交的分支
(换句话说,尖端提交的分支是
命名提交)。使用--merged,只有分支合并到指定的
提交(即,其尖端提交为
可以从指定的提交提交)。使用--no-merged,将仅列出未合并到指定提交中的分支。如果缺少该参数,则默认为HEAD(即
当前分支的尖端)。
考虑到先前的提交已被推送到远程分支,可以使用--contains键过滤可用的远程分支。
# git branch -r --contains HEAD~1
origin/HEAD -> origin/master
origin/master
要么
git branch -r --contains refs/heads/<local_branch_name>~1
如果您有2个未按下的提交,则要相应地更改数量以达到已经按下的提交:
# git branch -r --contains HEAD~2
origin/<parent_remote_branch>
如果本地未推动的提交量未知,则可以循环执行直到获得结果为止,例如:
#!bin/bash
i=0;
res=;
while [ -z \"$res\" ]; do
res=$(git branch -r --contains HEAD~$i);
echo \"$i\";
i=$(($i+1));
done
echo \"$res\"
当然,您可以将迭代次数限制在安全范围内。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。