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

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

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

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

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Q&A

解決済

2回答

2721閲覧

Gitのログを削除したい。Git の commit idなど。

guitar-man

総合スコア8

Git

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

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

0グッド

1クリップ

投稿2018/04/01 06:00

編集2018/04/01 09:40

前提・実現したいこと

Gitのログを削除したい。commit idなど。または、ブランチの削除。

発生している問題・エラーメッセージ

Gitのログを削除する場合、
git rebase -igit reset --hard 等で削除できると思いますが、マージされた後に、ログをまとめようと思って git rebase -i をし、まとめたいコミットで squash をしてもコミットはまとめられず新しく別れてしまうイメージになってしまいます。

イメージ説明

上記の bbb ブランチの3つのコミットのログを1つにするか、もしくわbbbのブランチ自体を削除したい。

また bbb ブランチを削除した場合は、下記のようになり、以前のログは残り続けます。
イメージ説明

該当のソースコード

Git

試したこと

ブランチを削除してもログやcommit id などは残り続けます。
git rebase -i をしても、ログやcommit idは削除されず、新しく分岐された状態になります。

補足情報(FW/ツールのバージョンなど)

SourceTree 2.7.1

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

masterブランチをローカルでコミット出来る前提で、こんな感じでしょうか。

$ git checkout bbb
$ git rebase -i 'first commit のコミットID'
squashでまとめる

$ git checkout master
$ git reset --hard bbb

$ git checkout ccc
$ git reset --hard master
$ git cherry-pick origin/ccc

最後に、master,bbb,cccをそれぞれ push -f

投稿2018/04/01 11:51

aquaS

総合スコア191

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

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

aquaS

2018/04/01 12:13

ブランチというのは、各枝の最新コミットIDに付けられた単なる別名に過ぎないので、消してもコミットそのものは消えないです。 履歴とは、そのブランチが付けられたコミットから辿れる過去を表示したものなので、 どのブランチからもbbbの3コミットを経由しないように配置し直せば良いということです。
guitar-man

2018/04/01 12:17

完璧でした。ありがとうございました。 今後ともよろしくお願いします!:D
guest

0

git push -fをすればできますが、よほどの事情がないのであれば基本的にやるべきではありません

というのも、origin/bbbとしてプッシュしてしまっている以上、それを書き換えることは同じリポジトリからプルした全員のリポジトリを書き換える必要が出てきてしまうからです。

gitのコミットは前のコミットのハッシュが含まれるという構造上、あるコミットを書き換えれば、それ以降のコミット全てに影響します

投稿2018/04/01 08:33

maisumakun

総合スコア145183

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

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

guitar-man

2018/04/01 09:37

`git push -f` をやるべきではないのはわかっているのですが、それでも良いので、過去のコミットログを選んで完全に削除したいです。削除したいコミットログは全て不要なログで、必要なログと必要でないログを分けたいという理由です。また今後プルする人もいなく、過去ログとして参照したいためにこの処理を実行したい理由です。画像では少ないコミット数ですが、実際のログでは大量のログがあるので、手動で確認しながら不要なコミットログを削除したいです。よろしくお願いします。
yumetodo

2018/04/01 10:43

別のrepoを作ってそっちにきれいな履歴だけのbranchをpushするとか?
guitar-man

2018/04/01 11:13

別のrepoを作ればできそうですね。ただ履歴は全部で5年分ぐらいあるので、できなくはないのですが、あまりにも時間がかかってしまいそうですね。
maisumakun

2018/04/01 11:45

「また今後プルする人もいなく、過去ログとして参照したい」のであればなおのこと、操作は行うべきでないと考えます。文字通り「ログ改竄」になるわけですし。 もちろん「大きすぎるファイルを入れてしまって、Git自体が重くなったのを解消する」とか「間違えて機密に当たるファイルを入れてしまったので、何が何でも消さなければならない」などの理由がある場合は別ですが。
yumetodo

2018/04/02 05:03

>別のrepoを作ればできそうですね。ただ履歴は全部で5年分ぐらいあるので、できなくはないのですが、あまりにも時間がかかってしまいそうですね。 言いたかったのはaquaSさん提示の方法で歴史改竄して、force pushする代わりに別のremoteにpushするという話なのですが・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問