間違いを犯したので、リポジトリの最新のプッシュを削除する方法がわかりません。アプリの最新の更新をプルしますが、競合があり、リポジトリにプッシュします。
最後のコミットを削除する方法は?またはそれを修正する方法?
そもそも、同じコードリポジトリで他の人と作業している場合、コミットを削除しないでくださいリポジトリは、同僚のローカルリポジトリを違法な状態のままにします(たとえば、削除した後にコミットを行った場合、現在存在しないコミットに基づいているため、それらのコミットは無効になります)。
つまり、できることはrevertコミットです。この手順は、使用しているCVSによって異なります(異なるコマンド)。
オン git :
git revert <commit>
オン Mercurial :
hg backout <REV>
EDIT:元に戻す操作は、元に戻すコミットとは反対の新しいコミットを作成します(たとえば、元のコミットが行を追加した場合、元に戻すコミットはそれを削除します行)、リポジトリ履歴を書き換えることなく、望ましくないコミットの変更を効果的に削除します。
not他の人と仕事をしている(または彼らに大きな迷惑をかけることを喜んでいる)場合、コミットを削除することができますbitbucketブランチから。
git reset HEAD^ # remove the last commit from the branch history
git Push Origin :branch_name # delete the branch from bitbucket
git Push Origin branch_name # Push the branch back up again, without the last commit
Gitでは一般に、masterブランチは特別ではありません-これは単なる慣習です。ただし、bitbucketとgithubおよび同様のサイトでは通常、メインブランチが必要です(おそらく、リポジトリにブランチがないイベントを処理するためのコードを書くよりも簡単だからです)。したがって、新しいブランチを作成し、それをメインブランチにする必要があります。
# on master:
git checkout -b master_temp
git reset HEAD^ # undo the bad commit on master_temp
git Push Origin master_temp # Push the new master to Bitbucket
Bitbucketでは、リポジトリ設定に移動し、「メインブランチ」をmaster_temp
に変更します(Githubでは、「デフォルトブランチ」を変更します)。
git Push Origin :master # delete the original master branch from Bitbucket
git checkout master
git reset master_temp # reset master to master_temp (removing the bad commit)
git Push Origin master # re-upload master to bitbucket
ここでBitbucketに移動すると、必要な履歴が表示されます。これで、設定ページに移動して、メインブランチをmaster
に戻すことができます。
このプロセスは、他の履歴の変更(git filter-branch
など)でも機能します。新しい履歴が古い履歴から分割される前に、適切なコミットにリセットする必要があります。
編集:明らかに、githubでこのような面倒な作業をすべて行う必要はありません。 強制ブランチのリセットプッシュ 。
次回誰かがあなたのリポジトリからプルしようとすると(彼らがすでに悪いコミットをプルしている場合)、プルは失敗します。変更された履歴の前に手動でコミットにリセットしてから、再度プルする必要があります。
git reset HEAD^
git pull
彼らが悪いコミットをプルした場合そしてその上でコミット、彼らはリセットし、そしてgit cherry-pick
彼らが作成したい良いコミットを効果的に再構築しなければなりません。悪いコミット。
不正なコミットをプルしたことがない場合、このプロセス全体は影響を与えず、通常どおりプルできます。
HEAD^
にリセットしてから、強制的にプッシュできます。
git reset HEAD^
git Push -u Origin master --force
最後のコミットが削除され、コミットが削除されたとしてbitbucketに反映されますが、サーバーには残ります。
過去にgit revertで問題が発生しました(主に、それがどのように動作するのかよくわからないためです)。マージの問題のために、revertで問題が発生しました。
私の簡単な解決策はこれです。
ステップ1。
git clone <your repos URL> .
プロジェクトを別のフォルダーに入れてから:
ステップ2。
git reset --hard <the commit you wanna go to>
次にステップ3。
最新の(そしてメインの)プロジェクトディレクトリ(問題のある最後のコミットを持っているもの)にステップ2のファイルを貼り付けます
ステップ4。
git commit -m "Fixing the previous messy commit"
ステップ5。
楽しい
他の人が言ったように、通常はhg backout
またはgit revert
を使用します。ただし、コミットを削除したい場合があります。
まず、リポジトリの設定に移動します。 Strip commits
リンクをクリックします。
破棄するチェンジセットのチェンジセットIDを入力し、Preview strip
をクリックします。それはあなたがそれをする前にあなたがどんな種類の損害をしようとしているのかを見ることができます。次に、Confirm
をクリックするだけで、コミットは履歴ではなくなります。すべてのコラボレーターにあなたが何をしたかを必ず伝えてください。そうすれば、彼らが誤ってコミットを押し戻してしまうことはありません。
現時点では、クラウドのbitbucket(どのバージョンかわからない)では、次のようにファイルシステムからコミットを元に戻すことができます(ChromeブラウザーでBitbucketインターフェイスから元に戻す方法がわかりません)。
-ディレクトリ全体をバックアップして、誤ってコミットした変更を保護する
-チェックアウトされたディレクトリを選択
-マウスの右ボタン:亀Gitメニュー
-repo-browser(メニューオプション「元に戻す」は、コミットされていない変更のみを元に戻します)
-HEADボタンを押します
-一番上の行を選択(最後のコミット)
-マウスの右ボタン:このコミットによる変更を元に戻す
-ファイルシステムの変更を元に戻した後、コミットを押します
-これにより、GITが 'Revert(以前のメッセージ)というメッセージで更新されます。これはコミットを元に戻します
-「コミットしてプッシュ」を選択します。