git - GitHub 拉取请求与 Git 命令行合并
问题描述
处理和关闭拉取请求时,您有三个合并选项 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
和:
git checkout master
git merge --no-ff develop
git push origin master
但我很困惑,因为这些是所有三个选项的相同示例。这不可能。所以我想我只是误解了这里的用户界面。
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>
该
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 的分支名称,最好是您在此操作期间刚刚编造的临时名称。然后git rebase
操作必须自己成功——否则,GitHub 本身不会为您提供执行 rebase-and-merge 的能力。如果变基操作成功并且您选择使用分离的 HEAD 执行此操作,您现在必须保存变基提交的哈希 ID。如果您选择使用一些临时分支名称来执行此操作,则此时不需要任何特别的东西。
现在原始提交链已被 rebase 操作复制,现在您
git checkout
要通过快进更新并运行该git merge --ff-only
操作的分支。您在此处提供的名称或哈希 ID 是成功的 rebase 操作生成的,或者作为分离的 HEAD 的尖端,或者更新为临时分支名称。如果您使用了临时分支名称,您现在应该删除该临时分支名称。
推荐阅读
- python-2.7 - ArcGIS Python Toolbox 参数依赖项
- uno-platform - 为什么 Uno.UI.Toolkit.VisibleBoundsPadding.PaddingMask="All" UWP 应用程序偶尔会崩溃?
- desire2learn - 访问问题。为什么我不能访问我的一些私人请求?
- javascript - 在tinymce 5中自动添加字体大小和行高
- python - 如何在 django rest 框架中过滤 1 个用户和卖家列表之间的距离
- cmake - 将 gRPC 依赖项添加到 Rocksdb 的 CMakeLists
- c++ - 与 std::fixed 结合使用时,std::setprecision 是否可以控制有效数字(不是小数位)?
- javascript - 不要使用 fetch/async/await 获得预期的数据
- ruby-on-rails - Rails 会话未在使用 Android 设备的 Rails 上持续存在
- sql-server - SQL-使用属性对活动进行分组并将组用作参数