GitHub 拉取请求与 Git 命令行合并

GitHub pull requests vs. Git command line merging

处理和关闭拉取请求时,您有三个合并选项创建合并提交压缩和合并变基并合并。我想知道这些选项如何转化为实际的 Git 命令 - 特别是关于 --no-ff.

合并对话框列出了这两个(第 1 步和第 2 步)示例:

git fetch origin
git checkout -b develop origin/develop
git merge master

并且:

git checkout master
git merge --no-ff develop
git push origin master

但我很困惑,因为这些是所有三个选项的相同示例。这不可能是对的。所以我想我只是误解了这里的用户界面。

Git 的命令是什么?--no-ff 是否在任何地方使用?

When working with and closing a pull request you have three merge options Create a merge commit, Squash and merge and Rebase and merge. I wonder how these options translate into actual Git commands - especially with regards to --no-ff.

  • GitHub"make a merge"按钮对应于:

    git checkout <branch>
    git merge --no-ff -m <message> <commit-hash>
    

    其中 message 部分是您必须手动生成的部分,因为您的本地 Git 不知道拉取的详细信息请求(它的编号,以及任何其他存储库)。 branch 部分是您的目标分支:合并完成后您希望合并提交所在的分支。

    请注意,此时您的存储库中必须具有指定的 commit-hash 提交对象。 GitHub 的幕后操作意味着它 在 GitHub 的 Git 存储库中可用,但它列在 refs/pull/ 引用,而不是该存储库中的分支名称。

  • GitHub"squash and merge"按钮对应:

    git checkout <branch>
    git merge --squash <commit-hash>
    git commit
    

    需要 git commit,因为命令行 --squash 标志打开命令行 --no-commit 标志。

  • GitHub "rebase and merge" 按钮大致对应于:

    # maybe: create a branch name (consider using git checkout -b next)
    git checkout <commit-hash-or-branch-name>
    git rebase <branch>
    git checkout <branch>
    git merge --ff-only <hash-or-name>
    # maybe: delete a branch name
    

    这是最复杂的一个:commit-hash-or-name 要么是您要提供给其他两个的提交哈希 ID,要么是标识该提交哈希 ID 的分支名称commit hash ID,最好是你在这个操作期间刚刚创建的临时名称。 git rebase 操作必须自行成功——否则,GitHub 本身不会为您提供变基和合并的能力。

    如果变基操作成功并且您选择使用分离的 HEAD 进行操作,您现在必须保存的哈希 ID重新提交的提交。如果您选择使用一些临时分支名称来执行此操作,则此时不需要任何特殊内容。

    既然原来的提交链已经被变基操作复制了,现在git checkout你想快进更新的分支和运行 git merge --ff-only 操作。您在此处提供的名称或哈希 ID 是成功的 rebase 操作生成的作为分离 HEAD 的尖端,或更新为临时分支名称的名称。

    如果您使用了临时分支名称,您现在应该删除该临时分支名称。