支持我从提交创建多个分支(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 >> file
git add file
git commit -m"2"
并且git日志会显示出来
*commit d259a3b(HEAD,ddd)
|
| 2
|
*提交efb038c(develop,ccc,bbb,aaa)
|
| 1
|
*commit dd24bb6(master)
甚至有可能知道ddd是从bbb分支出来的吗?
谢谢
小智 7
将这两个函数添加到您的 .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
}
Run Code Online (Sandbox Code Playgroud)
然后,当您创建新分支时,不要运行,git checkout -b mybranch而是执行:
newbranch mybranch
这会将您的分支日志存储在.git/branching_history文件中。您可以使用以下命令检查日志:
branchinghistory
输出应该是:
2020-04-22 23:59:06: from master created branch mybranch
总的来说,这确实是不可能的。GIT中只记录1的单一提交-ID(SHA-1)到其上的参考名称(诸如分支或标签)的点。该提交的历史记录仅由该提交的父ID(不记录分支名称)确定。当您推送到远程服务器时,您的“推送”操作将发送您要推送的提交的SHA-1(以及其他任何链接对象(树和文件,父提交等)的更多SHA-1,以及所有内容这些对象(根据遥控器上缺少的对象),并要求遥控器将其分支设置为指向新的SHA-1。
换句话说,您告诉遥控器:“在这里,提交1234567,并设置分支标签ddd= 1234567”。它可能会告诉您“要做的事,我还需要其他五次提交”,您已将其中之一标记为bbb,但是如果您不告诉遥控器“哦,也将标签bbb也设置为该另一次提交”,那么它将不会在任何地方都有该信息。
1这有点夸大其词:git还在reflog中记录存储在标签(包括分支标签)中的每个SHA-1。因此,可以回顾标签的历史以“弄清楚标签的开始位置”。但是,这有两个限制:reflog纯粹是本地的,从不通过获取或推送来传输;并且reflog会过期,通常在这种情况下会在90天后过期(尽管这是可配置的,并且存在其他复杂性)。因此,只要我们说有一个推动步骤,或者允许超过3个月的时间,就没有办法说出来。