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 的尖端,或更新为临时分支名称的名称。
如果您使用了临时分支名称,您现在应该删除该临时分支名称。
处理和关闭拉取请求时,您有三个合并选项创建合并提交、压缩和合并 和变基并合并。我想知道这些选项如何转化为实际的 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 的尖端,或更新为临时分支名称的名称。如果您使用了临时分支名称,您现在应该删除该临时分支名称。