如何将新(重写)历史记录推送到远程存储库

时间:2012-04-07 12:45:27

标签: git github

基本上,我有一个我想要解决的开放式拉取请求,同时我想将包含2个功能的1个提交分成两个单独的提交。

Github存储库现在看起来像修复是一个新的分支:

master c-c-c
            \
     fix c-c-c-c

我从修复程序中创建了一个拉取请求。

我想将修复中的最后一次提交更改为本地存储库中的2次提交,如下所示:

master c-c-c
            \
     fix c-c-c-n-n

其中n-n是我的2个新提交。

为了在本地达到这一点,我做到了这一点:

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"

所以现在我按照我想要的方式进行了2次提交。问题是我发现了一个最终出现在pull请求中的错误。由于我已经推送到远程存储库,它不会接受我的新提交(因为原来的提交现在已经丢失)。

我跑:

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'

我看到其他帖子建议在再次推回之前从原点撤消我的更改,但是基本上没有将我的2次提交重新设置回一个?

理想情况下,我想要做的是为最后一次提交分配相同的提交ID,以便它可以原样替换当前提交。有没有办法做到这一点? (请注意,我没有使用git reset

运行--hard

1 个答案:

答案 0 :(得分:69)

当面对这个问题时,强制推动对我有用:

git push --force origin fix