我有一个存储库,其中包含分支主服务器和A以及两者之间的大量合并活动.当基于master创建分支A时,如何在我的存储库中找到提交?
我的存储库基本上是这样的:
-- X -- A -- B -- C -- D -- F (master)
\ / \ /
\ / \ /
G -- H -- I -- J (branch A)
Run Code Online (Sandbox Code Playgroud)
我正在寻找修订版A,这不是git merge-base (--all)
找到的.
一些Git命令采用提交范围,一个有效语法是用两个点分隔两个提交名称..
,另一个语法使用三个点...
.
两者有什么不同?
我正在尝试将GitHub上的拉取请求检查到非主的分支.目标分支在master之后,pull请求显示master的提交,所以我合并master并将其推送到GitHub,但是它们的提交和差异仍然在刷新后出现在pull请求中.我加倍检查GitHub上的分支是否有来自master的提交.为什么他们仍然出现在拉动请求中?
我还在本地检查了pull请求,它只显示了未合并的提交.
偶尔我会被问到,git上某个分支的启动是什么,或者是否在特定分支上创建了某个提交.分支的终点非常清楚:分支标签所在的位置.但是 - 它从哪里开始?琐碎的答案是:在我们创建该分支的那个提交上.但据我所知,这些信息就是为什么我会问这个问题,在第一次提交后丢失了.
只要我们知道我们分支的提交,我们就可以绘制图表来说明:
A - B - C - - - - J [master]
\
D - E - F - G [branch-A]
\
H - - I [branch-B]
Run Code Online (Sandbox Code Playgroud)
我在提交时创建了branch-B,E
这就是"开始".我知道,因为我做到了.但其他人能否以同样的方式认识到它?我们可以绘制相同的图形:
A - B - C - - - - J [master]
\
\ F - G [branch-A]
\ /
D - E
\
H - I [branch-B]
Run Code Online (Sandbox Code Playgroud)
所以,现在看图表,哪个分支开始E
,哪一个在B
?提交D
两个分支的成员还是我们可以清楚地决定它是属于分支A还是分支B?
这听起来有点哲学,但实际上并非如此.监事有时想知道,当一个分支已经开始(它通常标志着一个任务开始)和其分支的一些变化属于(得到一些改变的目的 - 是它需要的工作),我会想知道git是否提供信息(工具,命令)或定义来正确回答这些问题.
我的git存储库有三个分支devel
,stable
和customers/acme_patches
.很久以前,它stable
是分叉的devel
,并且所有的错误修正都发生在stable
.时不时地stable
被合并回来devel
.customers/acme_patches
是一个具有一些客户特定补丁的分支.该分支未合并为devel
和stable
.
一些ASCII艺术来说明场景:
o---o---o customers/acme_patches? / o---o---1---o---o---o stable / \ \ o---o---o---2---o---o---o---o devel \ o---o---o customers/acme_patches?
现在我想知道:
customers/acme_patches
分叉的是什么分支- devel
或者stable
?我只是知道它过去曾分离过其中一个,但我不知道哪个.例如它可能已经提交1
或2
在上图中.
我一直在玩git log --oneline --graph
,gitk
但自从customers/acme_patches
分开了几百次提交之后,很难按照画出的线条.
是否有一个快速命令(一个小脚本也可以),它可以以某种方式跟随提交customers/acme_patches
向后找到第一个提交有两个孩子(叉点),然后确定是否在stable
或在中提交devel
?
在最好的情况下,我可以执行类似的操作(请原谅,我在Windows上):
C:\src> git fork-origin customers/acme_patches
stable
Run Code Online (Sandbox Code Playgroud) 假设我的项目包含两个主服务器(master和master_ios),我想知道功能分支的来源是什么(按原点,我的意思是功能分支所依据的分支),我将如何在git中完成此操作?
干杯
我有
A--B--C master
\
D branch0
Run Code Online (Sandbox Code Playgroud)
然后,我壁球B
和C
成B'
.我如何变形branch0
,看起来像这样:
A--B' master
\
D branch0
Run Code Online (Sandbox Code Playgroud) 我如何知道何时创建了一个git分支?
我不想知道什么时候第一次提交到那个分支.我想知道什么时候创建了这个分支.
这是一个重现一个工作示例的脚本:
#! /bin/bash
set -x
set -e
mkdir test
cd test
git init
echo "hello" >readme
git add readme
git commit -m "initial import"
date
sleep 5
git checkout -b br1
date # this is the date that I want to find out.
sleep 5
echo "hello_br1" >readme
git commit -a -m "hello_br1"
date
echo "hello_br1_b" >readme
git commit -a -m "hello_br1_b"
git checkout master
echo "hello_master" >readme
git commit -a -m "hello_master"
git branch -a;
git log …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个预接收挂钩,在接受推送提交之前进行一些验证.它适用于现有分支,因为我使用以下git命令来获取传入提交的列表:
git rev-list $old_sha1..$new_sha1
Run Code Online (Sandbox Code Playgroud)
但是,如果用户将新分支推送到共享存储库,则上述命令将失败,因为old_sha1全为零.所以问题是我如何获得新创建的分支的传入提交列表.做git rev-list $new_sha1
不起作用,因为它直到开始时才进行所有修改.有没有办法指定这样的东西:
git rev-list $branching_sha1..$new_sha1
Run Code Online (Sandbox Code Playgroud) 我一直在浏览"git merge-base",手册页,我无法理解多个合并库是如何发展的.具体来说,我挂在手册页中的下图中:
When the history involves criss-cross merges, there can be more than one best common
ancestor for two commits. For example, with this topology:
---1---o---A
\ /
X
/ \
---2---o---o---B
both 1 and 2 are merge-bases of A and B. Neither one is better than the other (both
are best merge bases). When the --all option is not given, it is unspecified which
best one is output.
Run Code Online (Sandbox Code Playgroud)
我无法理解如何创造这种情况.我试图使用测试存储库在分支之间重新创建这种纵横交错的合并情况,但我无法复制它.在所有情况下,我总是最终得到A和B指向的1个合并提交(而不是A和B指向独立的合并提交,如图所示).
谁能说明这种情况会怎样?这是常见情况还是错误情况?
找到两个git分支的共同祖先 - 这个问题解释了如何显示两个分支的共同祖先.
git merge-base branch1 branch2
Run Code Online (Sandbox Code Playgroud)
但是,我希望看到三个或更多分支的共同祖先.起初,我认为这会奏效.
git merge-base branch1 branch2 branch3 branch4
Run Code Online (Sandbox Code Playgroud)
给定三个提交A,B和C,
git merge-base A B C
将计算A和假设提交M之间的合并基础,这是B和C之间的合并
这不是我想要的.
你如何找到两个以上分支的共同祖先提交?
有两个不同的拉取请求:A和B.当A拉请求已经合并到Stash中的master时,Stash显示拉取请求B已被远程合并 (但它没有!).它以某种方式自动运作.没有钩子.
我试过跑:
git log --merges
Run Code Online (Sandbox Code Playgroud)
但我看不到B的合并提交
你能帮忙吗?
git树如下:
* c8372e0 (HEAD, master) Merge branch 'master' of http://...
|\
| * b091241 (origin/master, origin/HEAD) Merge pull request #193 in ...
| |\
| | * 629fb1f (origin/feature/A Fix
...
| | * e9042fb (origin/feature/B)
| | * d84a03c Merge branch 'master' into feature/B
Run Code Online (Sandbox Code Playgroud) git ×13
branch ×3
git-branch ×3
commit ×2
merge ×2
pull-request ×2
git-diff ×1
git-log ×1
git-merge ×1
git-rebase ×1
github ×1
hook ×1
rebase ×1
reference ×1