3种Github UI合并类型的细分

3种Github UI合并类型的细分,git,github,git-merge,pull-request,Git,Github,Git Merge,Pull Request,我已经使用Github UI合并PR(拉请求)有一段时间了,UI看起来像: 我试图更仔细地理解这三件事是如何运作的。以下是我对这三个选项的最佳猜测: 创建合并提交 git合并 挤压和合并 git合并--squash 重设基础和合并 git-rebase 这准确吗?还是我遗漏了什么?我的答案有一个较长的版本,但这里有一个简写版。所有这些都假设您首先在基本分支上,即,git checkout分支。下面的消息是Merge pull request#number from repository,

我已经使用Github UI合并PR(拉请求)有一段时间了,UI看起来像:

我试图更仔细地理解这三件事是如何运作的。以下是我对这三个选项的最佳猜测:

  • 创建合并提交
  • git合并
    
  • 挤压和合并
  • git合并--squash
    
  • 重设基础和合并
  • git-rebase
    

    这准确吗?还是我遗漏了什么?

    我的答案有一个较长的版本,但这里有一个简写版。所有这些都假设您首先在基本分支上,即,
    git checkout分支
    。下面的消息是
    Merge pull request#number from repository
    ,并且
    hash
    是根据pull请求自动计算的

  • 创建合并提交

    git合并--无ff-m消息散列

  • 挤压和合并

    git-merge--no-commit--squash散列和&git-commit-m消息

  • 重设基础和合并

    git-rebase——强制rebase散列


  • (请注意,如果发生合并冲突,则重新基础和合并将不起作用。我不清楚GitHub系统是使用
    --merge
    还是不使用它,或者完全使用其他方式进行检查。pull请求已经检查了使用
    git merge
    是否使用
    --squash
    refs/pull的合并冲突/head/number
    始终存在,但我认为只有在没有此类冲突的情况下,
    refs/pull/merge/number
    才会存在。他们还跟踪用于创建pull请求的“基本分支”是否是最新的,但不太清楚他们是如何做到的。)

    所以在每个命令之前,基本分支都会被签出,对吗?GitHub使用管道代码来进行所有更新,没有工作树,也没有签出,但或多或少,是的。除非您签出了基本分支,否则这些命令都不会正常工作,对吧?MrCholo敢知道。在一个普通的、非裸存储库中,是的,您必须首先签出正确的分支。在裸存储库中,没有任何工作树副本。您根本无法运行
    git merge
    git rebase
    (两者都需要工作树以防合并冲突)。但是,如果不仅没有冲突,而且也没有冲突的可能性,
    git read tree-m
    可以进行合并。如果这会导致潜在的合并冲突(冲突索引),合并单个文件是可能的,尽管这很平常。或者,可以修改Git源代码,使其
    Git merge
    查找并处理无冲突的更改。我不能说GitHub和其他人到底做了什么。
    git merge <base> <other>
    
    git merge --squash <base> <other>
    
    git rebase <base> <other>