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

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

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

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

GitHub

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

Q&A

解決済

1回答

1589閲覧

GitHubにUPした一部のファイルだけの存在と変更履歴を削除するためにはどのようなGitコマンドを実行すれば良いでしょうか?

echizeyayota

総合スコア106

Git

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

GitHub

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

0グッド

1クリップ

投稿2021/11/14 08:00

編集2021/11/14 08:10

以下の質問についてご存知の方がいらっしゃいましたら、ご教示を願います。


##【質問の主旨】

GitHubに任意のファイル群で構成されるフォルダをUPしています。そのフォルダの中で、1つのファイルについて、以下のように取扱いをしたいと考えています。

  • ローカル開発環境上 → ファイルの存在・変更履歴(history)はそのまま残す
  • GitHub上 → ファイルの存在・変更履歴をともにすべて削除する

なお、当該ファイル以外のファイルについては、今後もコードの内容を変更し、その都度GitHubにも変更した内容を反映させる(commitさせる)つもりです。

##【質問の補足】

1. 質問の対象となるファイルにについて

privateで開発しているため、URLをお伝えすることはできませんが、質問の対象となるファイルは"session.json"で、その画像は以下の通りです。

ローカル開発環境(ファイルの存在と変更履歴はそのまま残す)

イメージ説明

GitHub(ファイルの存在と変更履歴はすべて削除する)

イメージ説明

イメージ説明

2. .gitignoreとそれ以外のGitコマンドについて

今後、session.jsonの変更を反映させないようにするだけであれば、

$ vi .gitignore i session.json :wq

とすれば良いと思います。ただsession.jsonの存在と変更履歴はなかったことにし、かつそれ以外のファイルについては git commit し続けられるようにするためには、どういったGitコマンドを実行すれば良いのか分かりません。

3. session.json について

【質問の補足】の1において、privateで開発していると申し上げましたが、ひょっとするとpublicに切り替えるかもしれません。そのため個人情報が記載されている、session.json については存在や変更履歴などすべて削除したいと考えています。


以上、ご確認よろしくお願い申し上げます。

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

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

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

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

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

hoshi-takanori

2021/11/14 12:09

あるファイルをローカルの履歴には含めるけど github には含めないというのは原理的に無理ですね。(公開用ブランチとは別にプライベートなブランチを作ることはできますが…。)
echizeyayota

2021/11/15 07:58

hoshi-takanori さん。 コメントありがとうございます。 いろいろと考えた結果、最初から作り直すことにしました。 今回の質問で取り上げた session.json については、最初から.gitigonoreの対象にしておきます。 今後ともどうぞよろしくお願いします。
guest

回答1

0

ベストアンサー

本当に一番確実な事を言うと、
リポジトリごと全て削除してフォルダを作り直してしまうのが一番です。

状況からみてもプロジェクトはたった18日やそこらしか歴史がなく、
しかも更新されてるのかされていないのか分から宙ぶらりんになっている状態ですからね。


そして、これはコミット履歴の改ざん案件です。
masterブランチに混入したコミット履歴を改ざんするというのは非常にリスキーなので
基本的に一人しか触らないプロジェクトでしかやってはいけません。
※↑これはお約束の挨拶です。

ただし今は(多分)一人プロジェクトでプライベートリポジトリ
やっても良い要件を満たしている、やるなら今しか無い!


手段はgit rebasegit commit --amendかの2通りです。
今回はgit commit --amendが一番適切なような気がするのでそちらを紹介して、
git rebaseはさらっと紹介します。

git commit --amend

これは一個前のコミット履歴を改ざんするものです。
「あっ、やべ……間違えちゃったよ、さっきのコミット履歴からこの修正を入れたり抜いたりしてコミット履歴を作り直そうっと」
こういう用途で使われます。

現場でのよくある状況としてはこんな感じ。
featureブランチを一度GitHubにPushしてからプルリクエストでmasterにマージしてください。
でも「ここがあかんからマージするわけにはいかん、直してくれ」とレビューで突き返された。

その時にfeatureブランチに追加したコミット履歴にamendで混ぜて対応済とする事はよくあります。
(この辺は現場の価値観との相談になりますので、先輩等がいたら聞いてみてくださいね)

今回のケースに照らし合わせると、
masterブランチの改ざんなので、本当は良くないけど一人プロジェクトという状況かつ個人情報なので非常手段として妥当。
そしてsession.jsonファイルは一番最近の更新で追加されたファイルである。

コマンドの流れとしてはこんな感じになるでしょう。

bash

1$ git rm session.json 2 3# session.jsonを削除するという情報がステージに上がっている事を確認 4$ git status 5 6# 今後session.jsonを登録したくないので、.gitignoreに追記 7$ echo "session.json" >> .gitignore 8$ git add .gitignore 9 10$ git commit --amend 11 12# コミット履歴の改ざんは受け入れられないので強制を意味する-fオプションを付与 13$ git push -f origin master

git rebase

rebaseは直訳すると「土台を設定し直す」
お掃除とかやり直して綺麗にするといった意味の言葉です。

3.6 Git のブランチ機能 - リベース

これには3個前のコミット履歴をピンポイントで改ざんするとか、
特定のコミットIDの履歴を改ざんするとか
featureブランチで作業中に、masterブランチが更新されたので、masterブランチの修正内容を下に滑り込ませるみたいな多くの事が出来るコマンドになっています。

1コマンドで多くの事が出来るというのは、
それだけ複雑ということです。
説明するだけで複数の記事が必要なレベルでとても回答欄には書ききれません。

やり方は都度検索して調べつつの方が良いでしょう。
今回はgit commit --amendで事足りるので割愛します。

投稿2021/11/14 09:55

miyabi-sun

総合スコア21194

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

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

echizeyayota

2021/11/15 07:54

miyabi-sun さん。 ご丁寧なコメントありがとうございます。 > 本当に一番確実な事を言うと、 > リポジトリごと全て削除してフォルダを作り直してしまうのが一番です。 いろいろと考えた上で、今回の質問として投稿したフォルダは最初から作り直すことにします。 またあらかじめ"session.json" は .gitignoreとしてGitの管理から外すようにします。 (現在のところ「一人プロジェクトのプライベートリポジトリ」ですが、他人の目に触れたり、場合によっては他人の手が入るかもしれないので) これらを踏まえた上で"git commit --amend"の方法を試してみました。 今後の参考にします。 今後ともどうぞよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問