Sem*_*mel 7 git merge github pull-request
在处理和关闭拉取请求时,您有三个合并选项 Create a merge commit、Squash and merge和Rebase and merge。我想知道这些选项如何转化为实际的 Git 命令——尤其是关于--no-ff.
合并对话框列出了这两个(步骤 1 和步骤 2)示例:
git fetch origin
git checkout -b develop origin/develop
git merge master
Run Code Online (Sandbox Code Playgroud)
和:
git checkout master
git merge --no-ff develop
git push origin master
Run Code Online (Sandbox Code Playgroud)
但我很困惑,因为这些是所有三个选项的相同示例。这不可能是对的。所以我想我只是误解了这里的用户界面。
Git 的命令是什么并且在--no-ff任何地方都可以使用?
在处理和关闭拉取请求时,您有三个合并选项Create a merge commit、Squash and merge和Rebase and merge。我想知道这些选项如何转化为实际的 Git 命令——尤其是关于
--no-ff.
GitHub“进行合并”按钮对应于:
git checkout <branch>
git merge --no-ff -m <message> <commit-hash>
Run Code Online (Sandbox Code Playgroud)
其中message部分是您必须手动生成的内容,因为您的本地 Git 不知道拉取请求的详细信息(其编号和任何其他存储库)。该branch部分是您的目标分支:合并完成后您希望合并提交的分支。
请注意,commit-hash此时您的存储库中必须具有指定的提交对象。GitHub的幕后的操纵手段,它是在GitHub上的Git仓库可用,但它是一个下所列refs/pull/的参考,而不是一个分支名称,在该存储库中。
GitHub“squash and merge”按钮对应:
git checkout <branch>
git merge --squash <commit-hash>
git commit
Run Code Online (Sandbox Code Playgroud)
与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
Run Code Online (Sandbox Code Playgroud)
这是最复杂的一个:commit-hash-or-name要么是您将提供给其他两个的提交哈希 ID,要么是标识该提交哈希 ID 的分支名称,最好是您刚刚在此操作期间创建的临时名称。然后git rebase操作必须自己成功——否则,GitHub 本身将不会为您提供执行 rebase-and-merge 的能力。
如果 rebase 操作确实成功并且您选择使用分离的 HEAD 执行此操作,则现在必须保存 rebase 提交的哈希 ID。如果您选择使用某个临时分支名称来执行此操作,则此时不需要任何特殊内容。
现在提交的原始链已通过变基操作复制的,现在你git checkout的分公司要更新按快进和运行git merge --ff-only操作。您在此处提供的名称或哈希 ID 是成功的 rebase 操作作为分离的 HEAD 的提示生成的,或者更新为临时分支名称的名称。
如果您使用了临时分支名称,则现在应该删除该临时分支名称。
| 归档时间: |
|
| 查看次数: |
3599 次 |
| 最近记录: |