Supose次のシナリオを持っている:
あなたが "コミット悪い" d258546すなわちを削除したい
* 1bd2200 (HEAD, master) another commit
* d258546 bad commit
* 0f1efa9 3rd commit
* bd8aa13 2nd commit
* 34c4f95 1st commit
。
あなたはそれを削除するには、対話型リベースを試してみなければならない。git rebase -i 34c4f95
、あなたのデフォルトのエディタはこのようなものでポップアップ表示されます:
pick bd8aa13 2nd commit
pick 0f1efa9 3rd commit
pick d258546 bad commit
pick 1bd2200 another commit
# Rebase 34c4f95..1bd2200 onto 34c4f95
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
ちょうどあなたがストリップと保存したいコミットの行を削除+エディタを終了します。
pick bd8aa13 2nd commit
pick 0f1efa9 3rd commit
pick 1bd2200 another commit
...
gitは、このような何かを残して履歴からこのコミットを削除しますmmits)を除去からコミット子孫:今
* 34fa994 (HEAD, master) another commit
* 0f1efa9 3rd commit
* bd8aa13 2nd commit
* 34c4f95 1st commit
、私はあなたがすでに悪いがgitlabするコミット押されているとしているので、あなたがリポジトリにグラフをrepushする必要があります(が、それを防ぐために-f
オプションを使用してますgit push -f <your remote> <your branch>
)
慎重に、ブランチに「不正なコミット」を含む履歴を使用していることを確認してください。
代替オプション:
代わりの歴史を書き換え、あなたは単に新しいだけgit revert <your bad commit hash>
を入力し、これを行うために、あなたの悪いことで導入された変更をコミット否定したコミットを作成することができます。このオプションはきれいではないかもしれませんが、対話的なリベースで何をやっているのかを完全には理解していない場合にははるかに安全です。
コミットをgitlabサーバーにプッシュしました – marcusshep
@marcusshepはい! – mhery
@ anvaro-pが彼の答えの後にコメントで述べたように、あなたがプッシュするときに(-f)を強制し、ブランチがGitLabで保護されていないことを保証する必要があります。 – user12345