2016-10-25 15 views
7

GitLabで行ったコミットを削除するにはどうしたらいいですか?私が作ったこのコミットはHEADではありません。gitlabでコミットを削除する

削除できない場合は編集できますか?それがHEADだった場合は

、私が試した:

git reset --soft HEAD 

git reset --soft HEAD^1 

git revert HEAD 

git rebase -i HEAD 

git rebase -i HEAD~1 

git reset --hard HEAD 

git reset --hard Id-Code 

を私はすでにそれをリベースしようとしたが、それはまだ枝にとどまります。今、私はHEADからそれを削除しましたが、まだそこにあります。

別のコマンドがありますか?

+0

コミットをgitlabサーバーにプッシュしました – marcusshep

+0

@marcusshepはい! – mhery

+0

@ anvaro-pが彼の答えの後にコメントで述べたように、あなたがプッシュするときに(-f)を強制し、ブランチがGitLabで保護されていないことを保証する必要があります。 – user12345

答えて

12

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>を入力し、これを行うために、あなたの悪いことで導入された変更をコミット否定したコミットを作成することができます。このオプションはきれいではないかもしれませんが、対話的なリベースで何をやっているのかを完全には理解していない場合にははるかに安全です。

+0

'git revert'を間違いなく推奨します。作業がはるかに少なく、上書き履歴よりもはるかに安全です(これは設計上困難です)。もちろん、これは機密情報がプッシュされていないことを前提としています。 – tcooc

+0

@tcoocまあ、私の場合、機密情報がプッシュされた – mhery

+1

@mheryそして、最初のオプションはあなたが望むものです。 'git push -f'は永続的で可逆的ではないので、すべてのコミットが順番に並んでいることを再度確認してください。 – tcooc

3

がマスター

第一コマンドはcommitid及び第二のコマンドにあなたの頭は、そのコミットした後、すべてのコミットを削除します休むます-f起源を押し2.git --hard CommitIdをリセット1.gitマスターブランチ上のID。

+0

-fをpushに追加することを忘れないでください。そうでなければ拒否されます。 –

関連する問題