我打算在功能上做更多的工作,在编写代码之前我运行了git pull --rebase upstream master
。然后跑git push origin feature-branch
;这导致了其中一个“快进”错误,然后我运行了git pull origin feature-branch
。之后我修复了合并冲突并再次运行git push origin feature-branch
。现在我从feature-branch
到master
的pr被其他人的提交污染了。我注意到之前已经问过这个问题,但从未answered。
有人可以解释我做错了什么,也许可以解决这个问题?
答案 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
。保存并关闭文档时,将根据这些说明重建当前分支。