相关疑难解决方法(0)

Git:找到两个分支的最新共同祖先

如何找到两个Git分支的最新共同祖先?

git

787
推荐指数
4
解决办法
14万
查看次数

找到Git分支的父分支

假设我有以下本地存储库,其中包含如下提交树:

master --> a
            \
             \
      develop c --> d
               \
                \
         feature f --> g --> h
Run Code Online (Sandbox Code Playgroud)

master是我的这是最新的稳定版本代码,develop是我的这个'下一个'版本代码,feature一个正在准备的新功能develop.

我希望能够使用钩子在我的远程仓库上做什么,feature除非提交fdevelopHEAD 的直接后代,否则推送被拒绝.即提交树看起来像这样,因为功能已经git rebase打开d.

master --> a
            \
             \
      develop c --> d
                     \
                      \
               feature f --> g --> h
Run Code Online (Sandbox Code Playgroud)

那么有可能:

  • 确定父分支feature
  • 识别父分支中的提交,它f是后代的?

从那里我将检查父分支的HEAD是什么,并查看f前任是否与父分支HEAD匹配,以确定该特征是否需要重新定位.

git branch

387
推荐指数
14
解决办法
33万
查看次数

Git:如何压缩分支上的所有提交

我创建了新的分支master:

git checkout -b testbranch

我做了20次提交.

现在我要压缩那20个提交.我这样做:

git rebase -i HEAD~20

如果我不知道有多少提交怎么办?有什么方法可以做以下事情:

git rebase -i all on this branch

git version-control

241
推荐指数
15
解决办法
13万
查看次数

当前分支和主服务器之间的Git差异,但不包括未合并的主提交

我想要一个尚未合并到master的分支中的所有更改的差异.

我试过了:

git diff master
git diff branch..master
git diff branch...master
Run Code Online (Sandbox Code Playgroud)

但是,在每种情况下,diff都包含master中尚未合并到我的分支中的内容.

有没有办法在我的分支和主人之间做一个差异,排除了尚未合并到我的分支的主人的变化呢?

git version-control diff merge git-diff

147
推荐指数
4
解决办法
15万
查看次数

如何只为一个分支获取提交历史记录?

比方说,我创建了一个新的分支my_experimentmaster并提出了一些对提交my_experiment.如果我在启动git log时执行my_experiment,我会看到对此分支的提交,但也会在创建分支master之前进行提交my_experiments.

我会发现查看所有提交到my_experiments分支的历史记录非常有用,直到它触及该分支的创建 - 实际上是该分支的真实历史.否则,在通过日志查看提交是否在my_experiments分支上时,我不清楚.

有没有办法用Git做到这一点?

git git-log

111
推荐指数
4
解决办法
12万
查看次数

Git - 如何找到特定分支的第一次提交

在以下示例树中:

A-B-C-D-E (master branch)
    \
     F-G-H (xxx branch)
Run Code Online (Sandbox Code Playgroud)

我正在寻找F - xxx分支中的第一个提交.我认为有可能:

git log xxx --not master
Run Code Online (Sandbox Code Playgroud)

最后列出的提交应该是F.这是正确的解决方案还是有一些缺点?

我知道stackoverflow上有类似的问题,但没有人提出这样的解决方案,我不确定我是否做得对.

git

81
推荐指数
4
解决办法
3万
查看次数

我如何合并许多提交,但留下一个?

假设我有这个功能分支"foo".现在我想将它合并回master,但我添加了一些我不想在master中调试的代码.

调试代码在它自己的提交中,所以我可以git cherry-pick在每次提交时使用并省略此提交.但那会很烦人.

是否有一些"逆樱桃选择"这样做,或互动合并?

git merge

74
推荐指数
3
解决办法
4万
查看次数

Git分支从哪里开始,它的长度是多少?

偶尔我会被问到,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 version-control git-branch

64
推荐指数
8
解决办法
1万
查看次数

使用Git进行DAG与树的对比?

我经常读到Git使用有向无环图(DAG)数据结构,每次提交都是一个节点,而像分支和标签这样的东西作为节点的指针.

但是当我尝试使用像gitk这样的工具来显示我的提交历史时,它看起来更像是树而不是图形,因为每个父子关系都是单向的.

那么,DAG和树之间有什么区别,特别是关于Git?

git data-structures

48
推荐指数
1
解决办法
1万
查看次数

在Git中,我如何区分我的分支的第一次提交?

我已经对一个本地分支进行了多次提交,但是我不确定将我目前拥有的内容与我的分支的起始状态区分开来的最佳方法.我知道我可以做一些事情,比如git diff HEAD HEAD~6我的分支机构有6次提交,但我希望能有一些与提交数量无关的东西.

编辑:我没有提到这个:我希望我不必挖掘日志来获取我分支的提交的哈希值.例如,如果我有80次提交,这将不是一个有趣的任务.

另外,假设我分支的原始分支已经有了几处变化.

git git-diff

44
推荐指数
1
解决办法
1万
查看次数