我在git中有一个分支,想要弄清楚它最初分支的分支和什么提交.
Github似乎知道,因为当你执行pull请求时,它通常会自动设置它应该进入的分支,但我无法弄清楚如何从命令行手动执行此操作.
让我添加一个具体的例子:
master -- ongoing development
2.2 -- stable maintenance
Run Code Online (Sandbox Code Playgroud)
feature创建了一个功能分支(在B下面的提交中)并处理(B',C'&E')并与源分支合并以获取C和D
feature branch: B'-C'-C--D--E'
/ /
source branch: A--B--C--D--E-- ...
Run Code Online (Sandbox Code Playgroud)
现在我想合并feature回它的源代码,但我不确定它是否最初是分支master或者2.2.为了将功能合并到正确的来源,有没有发现如果源科是一个纲领性的方式master还是2.2?
Fro*_*sty 18
Git仅跟踪单个存储库中的"上游"信息,并且此信息不是静态的,也不是同一存储库的单独克隆之间共享的信息.
从命令行设置此关系的命令是:
git branch --set-upstream <branch> [<start-point>]
Run Code Online (Sandbox Code Playgroud)
查看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
Run Code Online (Sandbox Code Playgroud)
列出的提交较少的那个可能是分支点(但显然不能保证.
你也可以使用gitk或git log来浏览一下:
gitk --all
git log --graph --color --decorate --oneline --all
Run Code Online (Sandbox Code Playgroud)
AK *_* 12 10
如果您已经在系统中创建了分支,则可以使用它git reflog来检查源分支。它将有一条线指示您的checkout操作。例如:
6f52daa (origin/master, origin/HEAD, master) HEAD@{4}: checkout: moving from master to sample-branch
Run Code Online (Sandbox Code Playgroud)
小智 8
git branch -r
Run Code Online (Sandbox Code Playgroud)
使用 --contains 时,仅显示包含指定提交的分支(换句话说,其尖端提交是指定提交的后代的分支)。使用--merged,只会列出合并到指定提交中的分支(即可以从指定提交访问其尖端提交的分支)。使用 --no-merged 时,只会列出未合并到指定提交中的分支。如果缺少参数,则默认为 HEAD(即当前分支的尖端)。
考虑到之前的提交已经推送到远程分支,您可以使用 --contains 键过滤可用的远程分支。
# git branch -r --contains HEAD~1
origin/HEAD -> origin/master
origin/master
Run Code Online (Sandbox Code Playgroud)
或者
git branch -r --contains refs/heads/<local_branch_name>~1
Run Code Online (Sandbox Code Playgroud)
如果您还有 2 个未推送的提交,则相应地更改数量以达到已推送的提交:
# git branch -r --contains HEAD~2
origin/<parent_remote_branch>
Run Code Online (Sandbox Code Playgroud)
如果本地非推送提交的数量未知,您可以循环直到获得结果,例如:
#!bin/bash
i=0;
res=;
while [ -z "$res" ]; do
res=$(git branch -r --contains HEAD~$i);
echo "$i";
i=$(($i+1));
done
echo "$res"
Run Code Online (Sandbox Code Playgroud)
当然,为了安全起见,您可以限制迭代次数。