基本上,我有一个开放的拉取请求需要修复,同时我想要创建1个提交包含2个功能并将其分为2个单独的提交。
Github存储库现在看起来像这样,其中fix是一个新分支:
master c-c-c
\
fix c-c-c-c
我从修复中创建了一个拉取请求。
我想要将修复中的最后一次提交更改为本地仓库中的2个提交,如下所示:
master c-c-c
\
fix c-c-c-n-n
n-n代表我的两个新提交。
为了在本地达到这个点,我做了以下操作:
1. git rebase -i HEAD~2
2. Changed my last commit line to "edit", saved and closed the file
3. git reset HEAD^
4. git stash save
5. Removed the changes I don't want in the first commit
6. git commit -m "commit a" -a
7. git stash apply
8. git commit -m "commit b"
现在我有了两个我想要的提交。问题是,我发现一个错误出现在拉取请求中。由于我已经推送到远程仓库,它不会接受我的新提交(因为原始提交现在已经丢失)。
我运行:
git push origin fix --dry-run
我收到了这条消息:
To git@github.com:<UserName>/<Repository>.git
! [rejected] fix -> fix (non-fast-forward)
error: failed to push some refs to 'git@github.com:<UserName>/<Repository>.git'
我看到其他帖子建议在再次推送之前从源代码库中拉取我的更改,但这不会将我的两个提交重置为一个吗?
理想情况下,我希望将相同的提交ID分配给最后一个提交,以便它可以替换当前的提交。有什么办法可以做到这一点吗?(请注意,我没有使用--hard
运行git reset
)
git push --force origin fix
,那么项目所有者端的git fetch
是否会拉取修复内容? - PonyEarsgit fetch origin
然后再使用命令git reset --hard origin/master
进行重置。参考链接:https://dev59.com/U3I-5IYBdhLWcg3w48xP - NightOwl888