質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

Q&A

解決済

3回答

2496閲覧

git revertしても「Already up to date!」というメッセージのみでrevertできない

F.Iku

総合スコア3

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

1グッド

1クリップ

投稿2021/07/02 02:21

前提・実現したいこと

マージするのに不要な空コミットをbitbucket上から消したいです。
そのために git revert というものを知り、

git revert <commitID>

を実行しました。

イメージ説明

そうするとコンフリクトが生じているためリバートが完了できていないというメッセージが出てきました。
しかし、エディタで確認してもコンフリクトを起こしているようなファイルは 見つから無かったため(そもそも空コミットなのにコンフリクトなんて起こすのか?とも思ったので)

git revert --skip

を実行しました。
しかしここでbitbucketを確認しても空コミットを打ち消すようなコミットは作成されていませんでした。(またこのコードを実行したときの結果はスクショできていません。。)

イメージ説明

そこでもう一度git revertしようと思って同じコードを実行しても今度は「Already up to date」というメッセージのみが表示されるようになりました。

イメージ説明

いくつかある他の空コミットに対して、同じコードを実行しても結果は同じで、どうすれば空コミットを打ち消すようなgit revertが実行できるかご助言いただけると嬉しいです。

gitの公式URL(https://git-scm.com/docs/git-revert#_sequencer_subcommands)や検索をかけてみましたが、git revertで「Already up to date」というメッセージが表示されているような事例が確認できず解決には至りませんでした。

何卒よろしくお願いいたします。

resistance_gowy👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

マージするのに不要な空コミットをbitbucket上から消したいです。

基本的に、「一度リポジトリにプッシュされたものを書き換える」ことは、やってはいけません

Gitは分散型バージョン管理システムである以上、作業する全員がそれぞれコピーを持っています。その全部のコピーを修正しない限り、別な人は「空コミット」も含んだままの歴史となっています。そこからさらにプッシュしようとした場合、「空コミットを削った歴史」と「空コミットがある歴史」のマージが必要となり、からコミットは残り続ける上にいたずらに履歴を煩雑化させるという、誰も望まない事態に陥ってしまいます。

投稿2021/07/02 03:02

maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

「何の修正もしなかった」という変更を打ち消す修正は存在しないので、revertを実行しても何も起きないのは正常動作だと思います。

マージするのに不要な空コミットをbitbucket上から消したい

そもそもrevertコマンドは「変更を打ち消す修正を追加」するコマンドであり、revertコマンドを実行しても空コミットがあったという履歴は消えません。
例えばhogeという行を追加したコミットをrevertで打ち消した場合、hogeという行を削除するコミットが新たに追加されるだけで、hogeという行を追加したコミットが消滅するわけではありません。

コミットを消したいのであればgit rebase -iなどで履歴を修正するとよいと思います。

投稿2021/07/02 02:55

ku__ra__ge

総合スコア4524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

F.Iku

2021/07/03 09:59

>>「何の修正もしなかった」という変更を打ち消す修正は存在しないので、revertを実行しても何も起きないのは正常動作だと思います。 なるほど。空コミットだと少し勝手が違うんですね。 また git rebase -i というコマンドは知らなかったので勉強になりました!無事このコマンドでコミットを消す(まとめる)ことができました。ありがとうございます。
guest

0

マージするのに不要な空コミットをbitbucket上から消したいです。

git revert は変更を打ち消すコミットを作成するコマンドですので、空のコミットかどうかにかかわらず
過去のコミットが消えることはないです。

下記の変更のコミットがあった場合に

diff

1+ foo 2- bar

git revert では下記のような変更のコミットが作成されます

diff

1+ bar 2- foo

どうしても空のコミットをヒストリーから削除したいのであれば、下記のような手順でどうでしょうか

※下記の手順はかなり強引な手段なので、慎重かつ自己責任で実行してください。
また、複数人で作業、もしくは業務で行う場合は必ず許可を取ってください。
  1. 該当のブランチからブランチを切る
  2. 空のコミットがない状態まで git reset でヒストリ-を削除
  3. git diff , git status に差分がない状態までソースを戻す
  4. 空のコミットがある元のブランチの git log の古い方から空のコミット以外を git cherry-pick <コミットのハッシュ値> で取り込む
  5. git diff <元のブランチ名> で元のブランチと差分がないようならブランチ名を入れ替える
  6. git push -f origin <ブランチ名> で強制的にPushし、上書きする

※元のブランチは別名で残しておくと良いと思います。
※ブランチのヒストリーが変わるため、すでにこのブランチをPULLしている人はローカルのブランチを削除してPULLし直す必要があります。

投稿2021/07/02 03:10

satoshih

総合スコア797

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satoshih

2021/07/02 03:16

ku__ra__ge さんの書かれてる手順の方がいいですね。 なんにしてもバックアップをお忘れなく。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問