使用git rebase

时间:2018-06-10 05:44:27

标签: git github

我打算在功能上做更多的工作,在编写代码之前我运行了git pull --rebase upstream master。然后跑git push origin feature-branch;这导致了其中一个“快进”错误,然后我运行了git pull origin feature-branch。之后我修复了合并冲突并再次运行git push origin feature-branch。现在我从feature-branchmaster的pr被其他人的提交污染了。我注意到之前已经问过这个问题,但从未answered

有人可以解释我做错了什么,也许可以解决这个问题?

2 个答案:

答案 0 :(得分:3)

我明白了:

记下要保存的PR中所有提交的git commit哈希值(即你的提交)。

然后运行以下命令:

git fetch upstream
git reset --hard upstream/master
git cherry-pick <hash 1>
git cherry-pick <hash 2>
// cherry-pick all of your commits then:
git push -f origin your-branch

它应该自动修复您的PR

答案 1 :(得分:1)

如果您当前的分支有提交,您希望保留(您自己的)与您不想要的提交(由rebase添加的提交),您可以使用<?php $ch = curl_init (); curl_setopt_array ( $ch, array ( CURLOPT_URL => 'https://www.googleapis.com/upload/drive/v3/files?uploadType=media', CURLOPT_HTTPHEADER => array ( 'Content-Type: application/pdf', // todo: runtime detection? 'Authorization: Bearer [YOUR_AUTH_TOKEN]' ), CURLOPT_POST => 1, CURLOPT_POSTFIELDS => file_get_contents ( '/path/to/file.pdf' ), CURLOPT_RETURNTRANSFER => 1 ) ); try { if (false === ($resp = curl_exec ( $ch ))) { throw new \RuntimeException ( 'curl error ' . curl_errno ( $ch ) . ": " . curl_error ( $ch ) ); } $parsed = json_decode ( $resp, true ); if (! $parsed || $parsed ['code'] !== 200) { throw new \RuntimeException ( 'google api error: ' . $resp ); } } finally{ curl_close ( $ch ); } var_dump($resp); 再次编辑您的分支并保持只有您选择的提交。

首先,在之前找到您可能要编辑的最后一个提交的哈希值。如果您的分支最初基于git rebase --interactive,则选择的好提交是master返回的提交。

接下来,从当前提交到旧提交启动交互式rebase:

git merge-base HEAD master

您的文本编辑器将弹出表示分支中每个提交的行,并在其下方显示Git的说明。正如说明所述,对于代表您不想要的提交的每一行,将git rebase --interactive f1c3d284 更改为pick。保存并关闭文档时,将根据这些说明重建当前分支。