回答:
個々のコミットを元に戻すには:
git revert <commit_hash>
これにより、指定したコミットの変更を元に戻す新しいコミットが作成されます。特定のコミットのみを元に戻し、その後はコミットしないことに注意してください。コミットの範囲を元に戻すには、次のようにします。
git revert <oldest_commit_hash>..<latest_commit_hash>
これは、指定されたコミット間のコミットと指定されたコミットを含みます。
コマンドの詳細については、git-revertのmanページをご覧くださいgit revert
。コミットを元に戻す方法の詳細については、この回答もご覧ください。
git log
<oldest_commit_hash>
のリストに含まれています
「元に戻す」の痕跡を残さないソリューション。
注:誰かがすでに変更をプルしている場合は、これを行わないでください(これは私の個人リポジトリでのみ使用します)
行う:
git reset <previous label or sha1>
これにより、すべての更新がローカルで再チェックアウトされます(そのため、git statusはすべての更新されたファイルをリストします)
次に、「作業を行い」、変更を再コミットします(注:この手順はオプションです)
git commit -am "blabla"
現在、ローカルツリーはリモートツリーと異なります
git push -f <remote-name> <branch-name>
リモートをプッシュして強制的にこのプッシュを検討し、以前のプッシュを削除します(リモート名とブランチ名の指定は必須ではありませんが、更新フラグですべてのブランチを更新しないようにすることをお勧めします)。
!! 一部のタグがまだ削除されたコミットを指している可能性があることに注意してください!! リモートタグの削除方法
git push -f
は最後の正しいコミットとリモートの履歴をクリーンアップしただけです!ありがとう!
これらの場合に私がすることは:
サーバーで、カーソルを最後の既知の適切なコミットに戻します。
git push -f origin <last_known_good_commit>:<branch_name>
ローカルでは、同じことを行います:
git reset --hard <last_known_good_commit>
# ^^^^^^
# optional
my_new_branch
この目的で作成したブランチの完全な例を参照してください。
$ git branch
my_new_branch
これはいくつかのものを追加した後の最近の歴史ですmyfile.py
:
$ git log
commit 80143bcaaca77963a47c211a9cbe664d5448d546
Author: me
Date: Wed Mar 23 12:48:03 2016 +0100
Adding new stuff in myfile.py
commit b4zad078237fa48746a4feb6517fa409f6bf238e
Author: me
Date: Tue Mar 18 12:46:59 2016 +0100
Initial commit
すでにプッシュされた最後のコミットを取り除きたいので、実行します。
$ git push -f origin b4zad078237fa48746a4feb6517fa409f6bf238e:my_new_branch
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:me/myrepo.git
+ 80143bc...b4zad07 b4zad078237fa48746a4feb6517fa409f6bf238e -> my_new_branch (forced update)
いいね!これで、そのコミットで変更されたファイル(myfile.py
)が「ステージングされていないコミット」に表示されます。
$ git status
On branch my_new_branch
Your branch is up-to-date with 'origin/my_new_branch'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: myfile.py
no changes added to commit (use "git add" and/or "git commit -a")
これらの変更は必要ないので、カーソルもローカルに戻します。
$ git reset --hard b4zad078237fa48746a4feb6517fa409f6bf238e
HEAD is now at b4zad07 Initial commit
したがって、HEADはローカルとリモートの両方で、前のコミットにあります。
$ git log
commit b4zad078237fa48746a4feb6517fa409f6bf238e
Author: me
Date: Tue Mar 18 12:46:59 2016 +0100
Initial commit
gitコマンドラインで以下の手順を実行すると、ローカルとリモートの両方で Git Commit をREVERT(またはDELETEと呼ぶこともできます)できます。
次のコマンドを実行して、元に戻すコミットIDを確認します
git log --oneline --decorate --graph
(Webインターフェイス経由で)リモートもチェックすると、これは以下に示すものと同じであることがわかります
スクリーンショットあたりのとおり、現在、あなたがオンになっているのIDコミットe110322をあなたに戻すしたいしかし030bbf6 BOTH ローカルおよびリモート。
ローカル+リモートでコミットを削除/リバートするには、次の手順を実行します
最初にローカルでコミットしてコミットID 030bbf6
git reset --hard 030bbf6
に続く
git clean -f -d
これらの2つのコマンドは、以下のスナップショットに示すように、ステージ030bbf6をコミットするために強制リセットをクリーンアップします。
ここでgit statusを実行すると、次に示すように、リモートブランチからBEHINDの2つのコミットであることがわかります。
以下を実行してインデックスを更新します(更新がある場合)。すべての開発者に、メインのリモートブランチでのプルリクエストを受け入れないように依頼することをお勧めします。
git fetch --all
それが完了したら、次に示すように、ブランチの前に+記号を使用して、このコミットを強制的にプッシュする必要があります。私はここでマスターブランチとして使用しました。
git push -u origin +master
これで、リモートのWebインターフェイスが表示された場合は、コミットも元に戻す必要があります。
これにより、プッシュされたコミットが削除されます
git reset --hard 'xxxxx'
git clean -f -d
git push -f
git revert HEAD -m 1
上記のコード行。「最後の引数は表す」
1-1つのコミットを元に戻します。
2-最後の2つのコミットを元に戻します。
n-最後のn回のコミットを元に戻します。
リモートで有効にするには、このコマンドの後にプッシュする必要があります。元に戻すコミットの範囲を指定するなど、他のオプションがあります。これはオプションの1つです。
後で使用git commit -am "COMMIT_MESSAGE"
後、git push
またはgit push -f
git revert ref1..ref2
これが私のやり方です:
ブランチ名がであるとしましょうdevelop
。
# Create a new temp branch based on one history commit
git checkout <last_known_good_commit_hash>
git checkout -b develop-temp
# Delete the original develop branch and
# create a new branch with the same name based on the develop-temp branch
git branch -D develop
git checkout -b develop
# Force update this new branch
git push -f origin develop
# Remove the temp branch
git branch -D develop-temp