120

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

最後のコミットを削除するにはどうすればよいですか?またはそれを修正する方法は?

4

10 に答える 10

110

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

そうは言っても、あなたができることはコミットを元に戻すことです。この手順は、使用しているCVSに応じて異なる方法で実行されます(異なるコマンド)。

git

git revert <commit>

水銀について

hg backout <REV>

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

于 2013-02-13T16:39:13.337 に答える
103

他の人と一緒に作業していない場合(または他の人に重大な迷惑をかけさせて喜んでいる場合)、ビットバケットブランチからコミットを削除することができます。

非マスターブランチを変更しようとしている場合:

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では一般的に、マスターブランチは特別ではありません-それは単なる慣習です。ただし、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作成したい良いコミットをしなければならず、悪いコミットなしでブランチ全体を効果的に再作成します。

彼らが悪いコミットを引っ張ったことがなければ、このプロセス全体は彼らに影響を与えず、彼らは通常通り引っ張ることができます。

于 2014-09-01T04:18:53.510 に答える
58

リセットしてHEAD^から強制的に押すことができます。

git reset HEAD^
git push -u origin master --force

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

于 2015-08-09T18:10:53.123 に答える
16

最大4つのステップでの簡単なアプローチは次のとおりです。

0-リポジトリを修正するチームにアドバイスします

チームとつながり、今後の変更についてチームに知らせます。

1-最後のコミットを削除します

masterターゲットブランチが次のようになっていると仮定します。

$ git checkout master              # move to the target branch
$ git reset --hard HEAD^           # remove the last commit
$ git push -f                      # push to fix the remote

この時点で、一人で作業している場合は完了です。

2-チームメイトのローカルリポジトリを修正する

チームメイトについて:

$ git checkout master              # move to the target branch
$ git fetch                        # update the local references but do not merge  
$ git reset --hard origin/master   # match the newly fetched remote state

チームメイトに新しいコミットがなかった場合は、この時点で完了しているので、同期しているはずです。

3-失われたコミットを取り戻す

チームメイトがこのプロセスで失われた新しい未公開のコミットを持っていたとしましょう。

$ git reflog                       # find the new commit hash
$ git cherry-pick <commit_hash>

必要な数のコミットに対してこれを実行します。

私はこのアプローチを何度も成功裏に使用してきました。すべてが同期されていることを確認するには、チームの努力が必要です。

于 2019-09-25T05:24:38.487 に答える
4

このコマンドは私にとってうまく機能しました!!

私の場合、チームメイトが間違ったコードでコミットしました。だから私はとにかくそのコミットを元に戻さなければならないので、私はしようとしました

このコマンドを実行して、コミットを元に戻します

git revert [LastCommitID]

この後、変更はリポジトリに反映されませんでした。

このコマンドを実行しました

git push --force origin master

このコマンドは、最後のコミットを削除することで変更を反映しました

于 2021-07-08T06:45:25.363 に答える
3

私は過去にgitrevertに問題がありました(主に、それがどのように機能するかよくわからないためです)。マージの問題のために元に戻すのに問題がありました。

私の簡単な解決策はこれです。

ステップ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。

楽しみ

于 2013-05-24T23:15:02.773 に答える
3

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

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

Stripはbitbucket設定でリンクをコミットします

破棄するチェンジセットのチェンジセットIDを入力し、をクリックしますPreview strip。これにより、実行する前に、どのようなダメージを与えようとしているのかを確認できます。次にクリックConfirmするだけで、コミットは履歴ではなくなります。すべての共同作業者にあなたが行ったことを伝えて、問題のあるコミットを誤って押し戻さないようにしてください。

于 2019-04-15T01:21:41.327 に答える
1

Dustinが述べたように、Bitbucketに対してもコマンドを記述できます。

git push -f origin HEAD^:master

注:マスターの代わりに、任意のブランチを使用できます。そして、Bitbucketを押すだけで削除されます。

gitを使用してローカルで最後のコミットを削除するには:

git reset --hard HEAD~1
于 2019-06-24T13:05:40.483 に答える
0

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

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

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

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

2)コミットは次のようにリストされます。最近はページの下部に表示されますLILO(last in Last Out)

ここに画像の説明を入力してください

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

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

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

于 2017-10-24T07:50:43.407 に答える
0

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

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

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

-マウスの右ボタン:カメのgitメニュー

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

-HEADボタンを押します

-最上行(最後のコミット)を選択します

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

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

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

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

于 2018-05-07T11:36:42.053 に答える