間違えたので、リポジトリ内の最新のプッシュを削除する方法がわかりません。アプリの最新の更新をプルしますが、競合があり、リポジトリにプッシュします。
最後のコミットを削除するにはどうすればよいですか?またはそれを修正する方法は?
間違えたので、リポジトリ内の最新のプッシュを削除する方法がわかりません。アプリの最新の更新をプルしますが、競合があり、リポジトリにプッシュします。
最後のコミットを削除するにはどうすればよいですか?またはそれを修正する方法は?
そもそも、同じコードリポジトリで他の人と作業している場合は、コミットを削除しないでください。リポジトリを強制的に更新すると、同僚のローカルリポジトリが違法な状態になります(たとえば、削除したコミットの後にコミットを行った場合、それらのコミットは現在存在しないコミットに基づいているため、無効になります)。
そうは言っても、あなたができることはコミットを元に戻すことです。この手順は、使用しているCVSに応じて異なる方法で実行されます(異なるコマンド)。
gitで:
git revert <commit>
水銀について:
hg backout <REV>
編集: 元に戻す操作は、元に戻されたコミットとは逆の新しいコミットを作成し(たとえば、元のコミットが行を追加した場合、元に戻すコミットはその行を削除します)、リポジトリの履歴を書き換えることなく、不要なコミットの変更を効果的に削除します。
他の人と一緒に作業していない場合(または他の人に重大な迷惑をかけさせて喜んでいる場合)、ビットバケットブランチからコミットを削除することができます。
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
作成したい良いコミットをしなければならず、悪いコミットなしでブランチ全体を効果的に再作成します。
彼らが悪いコミットを引っ張ったことがなければ、このプロセス全体は彼らに影響を与えず、彼らは通常通り引っ張ることができます。
リセットしてHEAD^
から強制的に押すことができます。
git reset HEAD^
git push -u origin master --force
最後のコミットが削除され、コミットが削除されたときにビットバケットに反映されますが、サーバーには残ります。
最大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>
必要な数のコミットに対してこれを実行します。
私はこのアプローチを何度も成功裏に使用してきました。すべてが同期されていることを確認するには、チームの努力が必要です。
私の場合、チームメイトが間違ったコードでコミットしました。だから私はとにかくそのコミットを元に戻さなければならないので、私はしようとしました
このコマンドを実行して、コミットを元に戻します
git revert [LastCommitID]
この後、変更はリポジトリに反映されませんでした。
このコマンドを実行しました
git push --force origin master
このコマンドは、最後のコミットを削除することで変更を反映しました
私は過去に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。
楽しみ
hg backout
他の人が言っているように、通常はまたはを使用したいですgit revert
。ただし、コミットを本当に削除したい場合があります。
まず、リポジトリの設定に移動します。Strip commits
リンクをクリックします。
破棄するチェンジセットのチェンジセットIDを入力し、をクリックしますPreview strip
。これにより、実行する前に、どのようなダメージを与えようとしているのかを確認できます。次にクリックConfirm
するだけで、コミットは履歴ではなくなります。すべての共同作業者にあなたが行ったことを伝えて、問題のあるコミットを誤って押し戻さないようにしてください。
今では、クラウドビットバケット(どのバージョンかはわかりません)では、次のようにファイルシステムからコミットを元に戻すことができます(Chromeブラウザのビットバケットインターフェイスから元に戻す方法がわかりません)。
-ディレクトリ全体をバックアップして、誤ってコミットした変更を保護します
-チェックアウトされたディレクトリを選択します
-マウスの右ボタン:カメのgitメニュー
-repo-browser(メニューオプション'revert'はコミットされていない変更のみを元に戻します)
-HEADボタンを押します
-最上行(最後のコミット)を選択します
-マウスの右ボタン:このコミットによって変更を元に戻します
-ファイルシステムの変更を元に戻した後、commitを押します
-これにより、GITがメッセージ'Revert(前のメッセージ)で更新されます。これにより、コミットが元に戻ります。
-「コミットしてプッシュ」を選択します。