没有未合并提交的新拉取请求

3

我在一个代码仓库上创建了一个拉取请求,这些提交仍未合并。现在,我想创建另一个拉取请求,与先前的完全独立。当我创建一个新分支并进行新提交时,所有未合并的提交也与新提交一起出现!

我想创建一个没有未合并提交的新拉取请求。由于我对git不熟悉,请指导我应该如何操作 :)


1
不是很确定...但是git stash可能会派上用场。git checkout -b newBranchName也很有用。在执行此操作时,您需要在主分支上。听起来您正在从具有拉取请求的分支创建新分支,而不是从主分支创建新分支。 - admcfajn
3个回答

2
当我创建一个新分支并进行新的提交时,这就是你问题的根源。你应该从当前特性分支的父分支创建一个新分支,并从那里进行提交,而不是向同一特性分支添加提交。假设父分支是master,特性分支有3个提交。图表如下:
master:  ... A -- B -- C
                   \
feature:            M -- N -- O

如果您从feature创建了一个新分支并开始添加新的提交,最终得到的结果如下:

master:  ... A -- B -- C
                   \
feature:            M -- N -- O
                               \
new_ft:                         S -- T ...

换句话说,feature的历史记录是新分支的一部分。相反,您可以使用以下方法从master中的B提交创建一个新分支:
git checkout -b new_feature <SHA-1 for commit B>

现在,您可以制作另一组提交,然后第二个拉取请求基本上与第一个分开。请注意保留HTML标记。

嗨,Tim,谢谢你的快速回复,我很感激 :) 我从我的分支创建了一个分支;如果这样做是错误的,那么我应该如何创建一个新的分支,也许是一个新的派生?!! - user5222086
@好的用户 没错,从你打算开始的地方创建一个新分支。 - Tim Biegeleisen
@TimBiegeleisen 你说得对!从主分支创建新的分支并在主分支上提交 pull request 是最常见的模型。同时,在提交 pull request 前,要求贡献者将其代码变基到最新的主分支版本也是明智之举。 - jschnasse
2
是的,使用命令行!这个想法是:(1) 在github上fork (2) 从源代码克隆到你的电脑 (3) 将你的fork添加为远程仓库 (4) 将新分支推送到你的fork中 (5) 从你的fork向原master发起pull requests。 - jschnasse
1
我同意@jschnasse的观点...百分之百使用Git bash,现在是学习的好时机。 - Tim Biegeleisen
显示剩余5条评论

0

你可能是从你最近的功能分支创建了你的分支,而不是从主分支创建。

要从主分支创建分支,你必须先检出主分支。

这是我会做的事情。

0. 示例项目设置和工作流程

(1) 在 Github 上 fork (2) 克隆 origin 到你的电脑 (3) 添加你的 fork 为远程仓库 (4) 推送新分支到你的 fork (5) 从你的 fork 向 origin 主分支发起 pull request

可以查看 github workflow 作为一个经过充分测试的方法的示例。

1. 保持本地主分支与 origin 同步

回到你的主分支

git checkout master

通常将其与原始数据同步是个好主意。
git pull origin master

确保一切都符合预期

git log
git status

2. 从主分支创建分支

现在创建你的分支

git checkout -b new_branch

3. 将提交添加到您的分支

现在在您的原始分支中查找提交记录

git log old_branch_with_to_many_commits

所有提交都有一个哈希值。您可以使用这些数字将单个提交选取到您的新分支中。因此,请将您想要保留的第一个提交的哈希值复制到剪贴板中。

现在,使用git cherry-pick逐个将单个提交添加到您的新分支中。

git cherry-pick a_commit_hash
...
git cherry-pick next_commit_hash

4. 清理旧分支

现在你可能想要清理旧分支的提交记录。

git checkout old_branch_with_to_many_commits

查找您想要保留的最后提交的哈希值

git log

复制哈希值以重置分支

git reset --hard hash_of_the_last_commit_you_want_to_keep

如果您想解释那部分内容,我们还没有完成挑选。因为之后那些新的提交需要被删除或回滚。 - Tim Biegeleisen
我也加入了那个部分。 - jschnasse
但是要小心:如果分支可能被共享,那么您应该使用git revert而不是清除它(尽管在这里可能不太可能)。 - Tim Biegeleisen
谢谢你的回答,我很感激 :) - user5222086

0
创建Satsh,它将在某个存储中临时存储您的提交。
git stash

然后创建一个新分支

git checkout -b "new branch name".

然后通过弹出存储的内容,在新分支中获取所有提交

git stash pop

所有在旧分支中的提交将保存在此处。

否则,如果您想提交并且所有更改也已提交到新分支,则只需在该分支中提交所有更改并创建一个新分支即可。

git checkout -b "new branch"

当您从以前的分支创建新分支时,所有更改都会在新分支中生效


2
提交已经完成 - 就我所理解的而言。因此,“stash”不会有帮助。 - jschnasse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接