git - 为每个提交创建单独的 pull 请求

标签 git github pull-request

我知道这不是一个新问题,但是我尝试了此处提供的许多解决方案,但似乎对我没有任何帮助。

我已经 fork 了一个项目来贡献它。我做了多次提交,它们都只包含在一个 pull 请求中。

我想为每个提交创建新的 pull 请求,我尝试创建一个新分支并愉快地挑选特定的提交,但它似乎不起作用。

  1. 我有一个主分支,它比远程分支提前 4 次提交。 https://github.com/Gaurang033/Selenium2Library
  2. 如果我从我的 master 创建一个新分支,所有这些更改也会被复制。因此创建分支机构也无济于事。 https://github.com/Gaurang033/Selenium2Library/tree/click_elements

这是 git log --all --oneline --graph --decorate 的一些输出:

* 340fb9e (origin/click_elements) Feature Request - Click Elements #585
*   8a8f485 (HEAD -> master, origin/new_locator, origin/master, origin/HEAD) Merge remote-tracking branch 'upstream/master'
|\
| * 2466942 (upstream/master) Libdoc updates - link to project and fix 404 (#668)
* | e66862f Added method to find element by class name #673
* | f8ec2ed Feature Request - Click Elements #585
* | 264e38c Added following keywords and their acceptance test cases to fix the issue #463 table_cell_should_not_contain table_column_should_not_contain table_footer_should_not_contain table_header_should_not_contain table_row_should_not_contain table_should_not_contain
| * [truncated: more commits on master in original repo...]
|/
*   ef5d24d Merge pull request #539 from ReadmeCritic/master

有人请告诉我如何解决这个问题吗?

最佳答案

在 GitHub 上提交 PR 时,通常最好保持 PR 的原子性,并使其与官方 master 保持同步。也就是说,您用于 PR 的任何分支都应该直接来自 upstream/master,并且应该只包含该 PR 所需的提交。

要解决您的问题,首先,将 master 重置为与 upstream 同步:

git checkout master
git reset --hard upstream/master

现在,对于您要提交的每个 PR,创建一个新分支并挑选合适的提交。例如:

git checkout -b branch1
git cherry-pick f8ec2ed
git push --set-upstream origin branch1

完成后,可以删除原来的click_elements分支:

git branch -D click_elements
git push :click_elements

或者,如果您希望该分支仅包含第一个提交(从而允许您重用现有的 PR),请执行以下操作:

git checkout click_elements
git reset --hard 264e38c
git push --force-with-lease

为避免将来出现此问题,切勿直接提交给 master。相反,请执行以下操作:

  1. 如有必要,更新您的存储库:

    git checkout master
    git pull upstream master
    
  2. 创建一个新分支(git checkout -b mybranch)。

  3. 在那个分支上为这个 PR 做任何需要的改变,像往常一样提交。
  4. 在提交您的 PR 之前,立即 rebase 您的功能分支:

    git checkout master
    git pull upstream master
    git checkout mybranch
    git rebase master
    

    (根据项目的不同,即使在打开 PR 之后,您也可以 rebase 。但是,通常您不需要这样做,尤其是在打开 PR 之前就这样做了。)

  5. 打开 PR。


强制性警告:由于 rebase (以及reset --hard)重写历史,这对于在此分支上工作的任何其他人来说可能是危险的/破坏性的。请务必清楚地向任何与您合作的人传达您所做的事情。

关于git - 为每个提交创建单独的 pull 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40027468/

相关文章:

git - 尝试克隆 git 存储库时出现 "ERROR:gitosis.serve.main:Repository read access denied"

git - 减少 .git 文件夹大小

github - 如何将 github 操作输出保存到 repo?

Github 提交语法以链接 pull 请求/问题

git - 如何解决 pull 请求期间的 merge 冲突?

PyCharm 中的 Git 使用预先存在的存储库

Git checkout 到新的工作目录

git - 在接收后 Hook 中重用 GIT_WORK_TREE 来 rm 一些文件

命令行上 pull 请求的 Git 语法

git - 在项目之间共享 Github pull 请求模板的最佳方式?