11

OK、私は愚かなことをしました。

  • 貢献することになっているリポジトリをフォークしました。
  • そこで、文字通り「blafile」というファイルを作成して、コミットできることを確認し(明らかに、フォークが何であるかを理解していませんでした)、「コミットできることを確認してください」というメッセージを表示してコミットしました。
  • 私は自分のgithubフォークリポジトリにプッシュし、それを忘れました。
  • 翌日からバグ修正を始めました。
  • 私は修正をコミットし、「修正されたバグxyz」というメッセージとともにフォークされたリポジトリにプッシュしました。

プルリクエストを発行したかったのですが、突然「コミットできるかどうかを確認してください」というコミットが表示されました。プルリクエストにそれを表示したくありません。:)

そのコミットを完全に削除できますか?単一のコミットでプルリクエストを発行できますか、それともすべてのコミットをプルしますか?

ローカルで実行できることはわかっていますがgit reset --hard HEAD~1(これは、すばやくやり直すことができる小さな修正です)、それはローカルリポジトリのみを修正し、github(フォーク)リポジトリは修正しません。

4

2 に答える 2

12

たくさんのオプション。

最良のオプションは、おそらく新しいブランチを作成し、そのブランチに修正をチェリーピックすることです。

git checkout -b my-fix-branch origin/master
git cherry-pick master
git push -u origin my-fix-branch

my-fix-branch次に、GitHubからプルリクエストを実行します。master(これは、作業ブランチの名前がリモートに基づいていることを前提としていますmaster。必要に応じてブランチ名を変更してください)。


もあなたのフォークを引っ張ったり複製したりしていない場合は、履歴を強制的に書き換えることができます。問題のあるコミットを実行しgit rebase -i HEAD~2て削除してから、git push --force。これにより、フォークに基づく他のリポジトリが破損するため、他の誰かがあなたのリポジトリを使用している疑いがある場合は、これを行わないでください。

于 2013-03-26T22:22:00.033 に答える
3

次の一連のコマンドは、無効なコミットが現在のHEADの1つ前のコミットであり、ブランチ名が。であると想定して機能するはずですmaster

注:次のコマンドは履歴を書き換えますが、誰かがすでにリポジトリのクローンを作成している場合はお勧めしません。そうでない場合push -fは、大したことではありません。

# Switch the current working tree to master branch
git checkout master
# Soft reset to get all the changes since HEAD~2 into the index/staging area
git reset --soft HEAD~2
# Remove the blafile from the staging area
git rm --cached blafile
# Commit the changes you actually intended to make
git commit
# Update the refs on the remote forcefully to push the newer commit.
# Note that if any one else has pulled master already with your blafile
# commit, they would be really pissed off with you now.
git push -f origin master
于 2013-03-26T22:21:49.477 に答える