我在一个代码仓库上创建了一个拉取请求,这些提交仍未合并。现在,我想创建另一个拉取请求,与先前的完全独立。当我创建一个新分支并进行新提交时,所有未合并的提交也与新提交一起出现!
我想创建一个没有未合并提交的新拉取请求。由于我对git不熟悉,请指导我应该如何操作 :)
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>
你可能是从你最近的功能分支创建了你的分支,而不是从主分支创建。
要从主分支创建分支,你必须先检出主分支。
这是我会做的事情。
(1) 在 Github 上 fork (2) 克隆 origin 到你的电脑 (3) 添加你的 fork 为远程仓库 (4) 推送新分支到你的 fork (5) 从你的 fork 向 origin 主分支发起 pull request
可以查看 github workflow 作为一个经过充分测试的方法的示例。
回到你的主分支
git checkout master
git pull origin master
确保一切都符合预期
git log
git status
现在创建你的分支
git checkout -b new_branch
现在在您的原始分支中查找提交记录
git log old_branch_with_to_many_commits
所有提交都有一个哈希值。您可以使用这些数字将单个提交选取到您的新分支中。因此,请将您想要保留的第一个提交的哈希值复制到剪贴板中。
现在,使用git cherry-pick逐个将单个提交添加到您的新分支中。
git cherry-pick a_commit_hash
...
git cherry-pick next_commit_hash
现在你可能想要清理旧分支的提交记录。
git checkout old_branch_with_to_many_commits
查找您想要保留的最后提交的哈希值
git log
复制哈希值以重置分支
git reset --hard hash_of_the_last_commit_you_want_to_keep
git revert
而不是清除它(尽管在这里可能不太可能)。 - Tim Biegeleisengit stash
然后创建一个新分支
git checkout -b "new branch name".
然后通过弹出存储的内容,在新分支中获取所有提交
git stash pop
所有在旧分支中的提交将保存在此处。
否则,如果您想提交并且所有更改也已提交到新分支,则只需在该分支中提交所有更改并创建一个新分支即可。
git checkout -b "new branch"
当您从以前的分支创建新分支时,所有更改都会在新分支中生效
git stash
可能会派上用场。git checkout -b newBranchName
也很有用。在执行此操作时,您需要在主分支上。听起来您正在从具有拉取请求的分支创建新分支,而不是从主分支创建新分支。 - admcfajn