web-dev-qa-db-ja.com

Bitbucketの最後のコミットを削除する

間違いを犯したので、リポジトリの最新のプッシュを削除する方法がわかりません。アプリの最新の更新をプルしますが、競合があり、リポジトリにプッシュします。

最後のコミットを削除する方法は?またはそれを修正する方法?

96
catherine

そもそも、同じコードリポジトリで他の人と作業している場合、コミットを削除しないでくださいリポジトリは、同僚のローカルリポジトリを違法な状態のままにします(たとえば、削除した後にコミットを行った場合、現在存在しないコミットに基づいているため、それらのコミットは無効になります)。

つまり、できることはrevertコミットです。この手順は、使用しているCVSによって異なります(異なるコマンド)。

オン git

git revert <commit>

オン Mercurial

hg backout <REV>

EDIT:元に戻す操作は、元に戻すコミットとは反対の新しいコミットを作成します(たとえば、元のコミットが行を追加した場合、元に戻すコミットはそれを削除します行)、リポジトリ履歴を書き換えることなく、望ましくないコミットの変更を効果的に削除します。

92
asermax

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彼らが作成したい良いコミットを効果的に再構築しなければなりません。悪いコミット。

不正なコミットをプルしたことがない場合、このプロセス全体は影響を与えず、通常どおりプルできます。

91
naught101

HEAD^にリセットしてから、強制的にプッシュできます。

git reset HEAD^
git Push -u Origin master --force

最後のコミットが削除され、コミットが削除されたとしてbitbucketに反映されますが、サーバーには残ります。

43
Shubanker

過去に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。

楽しい

3
SudoPlz

他の人が言ったように、通常はhg backoutまたはgit revertを使用します。ただし、コミットを削除したい場合があります。

まず、リポジトリの設定に移動します。 Strip commitsリンクをクリックします。

Strip commits link in bitbucket settings

破棄するチェンジセットのチェンジセットIDを入力し、Preview stripをクリックします。それはあなたがそれをする前にあなたがどんな種類の損害をしようとしているのかを見ることができます。次に、Confirmをクリックするだけで、コミットは履歴ではなくなります。すべてのコラボレーターにあなたが何をしたかを必ず伝えてください。そうすれば、彼らが誤ってコミットを押し戻してしまうことはありません。

0
nmichaels

変更がコミットされると、削除できなくなります。コミットの基本的な性質は削除しないことです。

できること(簡単で安全な方法)、

インタラクティブリベース:

1)git rebase -i HEAD~2#最近の2つのコミットを表示します

2)コミットのリストがのようになります。最近はページの下部に表示されます。

enter image description here

最後のコミット行を完全に削除します

3)ctrl+XまたはESC:wqで保存する

これで、最後のコミットなしでブランチが更新されます。

現時点では、クラウドのbitbucket(どのバージョンかわからない)では、次のようにファイルシステムからコミットを元に戻すことができます(ChromeブラウザーでBitbucketインターフェイスから元に戻す方法がわかりません)。

-ディレクトリ全体をバックアップして、誤ってコミットした変更を保護する

-チェックアウトされたディレクトリを選択

-マウスの右ボタン:亀Gitメニュー

-repo-browser(メニューオプション「元に戻す」は、コミットされていない変更のみを元に戻します)

-HEADボタンを押します

-一番上の行を選択(最後のコミット)

-マウスの右ボタン:このコミットによる変更を元に戻す

-ファイルシステムの変更を元に戻した後、コミットを押します

-これにより、GITが 'Revert(以前のメッセージ)というメッセージで更新されます。これはコミットを元に戻します

-「コミットしてプッシュ」を選択します。

0
smriti

Dustin で述べられているように、Bitbucket用のコマンドを書くこともできます。

git Push -f Origin HEAD^:master

注:マスターの代わりに、任意のブランチを使用できます。そして、Bitbucketのプッシュのみを削除します。

Gitで最後のコミットを削除するには locally を使用します。

git reset --hard HEAD~1
0
invzbl3