支持我从提交中创建多个分支(aaa,bbb,ccc)。然后,我从一个分支(bbb)创建一个新分支(ddd)并对其进行提交。
然后我将所有东西推到遥控器上。另一个人怎么知道新分支(ddd)来自哪个分支?
我做的git命令是:
git branch aaa
git branch bbb
git branch ccc
git branch ddd bbb
git checkout ddd
echo 2>>文件
git add file
git commit -m“2”
git log会显示
* commit d259a3b(HEAD,ddd)
|
| 2
|
*提交efb038c(develop,ccc,bbb,aaa)
|
| 1
|
* commit dd24bb6(master)
甚至可以知道ddd是从bbb分支的?
由于
答案 0 :(得分:3)
一般来说确实是不可能的。 Git仅记录 1 引用名称(例如分支或标记)指向的单个commit-ID(SHA-1)。 commit 的历史记录仅由该提交的父ID确定,这些父ID不记录分支名称。当你推到遥控器时,你的"推"操作发送您正在推送的提交的SHA-1(对于任何其他链接的对象 - 树和文件,父提交等,以及所有这些对象的内容,根据需要基于&#发送更多SHA-1) 39;在遥控器上丢失了),并要求遥控器将其分支设置为指向新的SHA-1。
换句话说,你告诉远程:"这里,提交1234567,并设置分支标签ddd
= 1234567"。它可能告诉你这样做我需要另外五个提交",其中一个你标记为bbb
,但如果你不告诉遥控器"哦,通过将标签bbb
设置为另一个提交的方式"然后它就不会在任何地方获得这些信息。
1 这有点夸大其辞:git还在reflog中记录了存储在标签中的每个SHA-1,包括分支标签。因此,可以回顾标签的历史记录到"找出它的起始位置"。但是有两个限制:reflogs纯粹是本地的,从不通过fetch或push传输;并且reflogs在这些情况下通常在90天后过期(尽管这是可配置的并且还有其他复杂性)。因此,只要我们说这是一个推动步骤,或者允许超过3个月通过,就没有办法说出来。
答案 1 :(得分:1)
分支只不过是指向特定提交的指针。您只能看到从哪个提交ddd
分支,而不是从哪个分支。
答案 2 :(得分:1)
分支只是提交的指针。因此,除了观察两个分支在某个点上具有相同的历史之外,不可能看到分支的起源位置。
对于上游某人而言,它与分支的起源无关,只与它包含某个提交(或提交序列)无关。这决定了git如何/如果能够快进或合并分支。
答案 3 :(得分:1)
将这两个函数添加到您的.bashrc中:
function newbranch() {
history_file=".git/branching_history"
from=`git rev-parse --abbrev-ref HEAD`
to=$1
git checkout -b $1 > /dev/null 2>&1
DATE=`date '+%Y-%m-%d %H:%M:%S'`
echo "$DATE: from $from created branch $1" >> $history_file
}
function branchinghistory() {
cat .git/branching_history
}
然后,当您创建新分支时,请勿运行git checkout -b mybranch
,但可以执行以下操作:
newbranch mybranch
这会将您的分支日志存储在.git/branching_history
文件中。您可以使用以下方法查看日志:
branchinghistory
输出应为:
2020-04-22 23:59:06: from master created branch mybranch