微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何确定特定分支的源分支?

如何解决如何确定特定分支的源分支?

| 我在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 举报,一经查实,本站将立刻删除。