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

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

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

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

GitHub

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

GitLab

GitLabは Gitoliteをブラウザから管理できるようにする Rubyアプリケーションで、 GitHubのようなサービスをクローズドな環境に独自で構築できるように 公開されたものです。

Q&A

解決済

1回答

2959閲覧

大量の変更履歴を「unstage」状態から取り除く方法

ruuuu

総合スコア176

Git

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

GitHub

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

GitLab

GitLabは Gitoliteをブラウザから管理できるようにする Rubyアプリケーションで、 GitHubのようなサービスをクローズドな環境に独自で構築できるように 公開されたものです。

0グッド

0クリップ

投稿2020/08/31 12:53

編集2020/08/31 13:02

リモートリポジトリから、プルした際に、大量の変更履歴が取り込まれてしまいました。
PULLの直後に、git statusとすると、緑色の文字でファイルがかなりの数表示されておりました為、こちらは既にステージング状態であると判断しました。
その為、このまま、addcommitすると大量の変更履歴のコミットができてしまうと判断し、一度unstageの状態にする為、git reset HEADとしました。
そうしますと、unstageに大量の変更履歴が追加されました。
この状態で、変更されたファイルはそのままに、「unstage」になっている大量の変更履歴を削除したいと考えています。
調べた限りですと、 git clean -f.こちらを行うと可能なようなのですが、実は、以前こちらのコマンド使用時に、「unstage」状態が取り除かれるだけでなく、ファイル自体も削除されてしまうといった問題が起きてしまいました。
今の状態ですと、リモートリポジトリにプッシュを行うと、大量の変更履歴がプッシュされてしまう為、なんとしても避けたいと考えています。
こちらの問題を解決する為、どなたかご助言頂けましたら幸いです。

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

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

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

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

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

maisumakun

2020/08/31 13:06

> 以前こちらのコマンド使用時に、「unstage」状態が取り除かれるだけでなく、ファイル自体も削除されてしまうといった問題が起きてしまいました。 改めて正しい箇所をcheckoutすれば問題ないのではないでしょうか?(それとも、Gitに一切コミットしていないファイルがあって、それは維持する必要がある、という状況でしょうか)
ruuuu

2020/08/31 13:13

> 改めて正しい箇所をcheckoutすれば問題ないのではないでしょうか? gitの経験があまりなく、分からないのですが、「checkout」というのはブランチを切るということでしょうか?
ruuuu

2020/08/31 13:14 編集

現状のブランチのまま対処したいと考えています
guest

回答1

0

ベストアンサー

この状態で、変更されたファイルはそのままに、「unstage」になっている大量の変更履歴を削除したいと考えています。

このやりたいことそのものが矛盾しているようにも思えるのですが…

「他のコミットに同じ変更が存在する」というのでなければ、いまあるファイルの変更部分=unstagedな変更履歴です。変更された箇所はそのまま、unstagedだけ消す、なんていう芸当はできません。

実現できることは、

  • ローカルの変更をすべて破棄して、どこかのコミットと状態を揃える(ちょうど実現したい状態を持ったコミットがあるなら、そこに揃えることが可能です)
  • 現在の状態をすべてステージ、コミットする
  • 現在の状態を取捨選択して、必要分だけコミットする

のどれかです。

投稿2020/08/31 13:25

maisumakun

総合スコア145930

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

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

maisumakun

2020/08/31 13:27

いちおうは、「コミットとファイルの状態が違っても無視させる」という手段も存在はするのですが、それをやるとGit管理から外れるのに等しくなるので、環境ごとに違えないといけない設定ファイルなどを除いて通常は用いません。
ruuuu

2020/08/31 13:33

ご回答ありがとうございます。 前々から疑問であった点ではあるのですが、リモートの変更をローカルに取り込むということをした際に、ローカル側ではadd,commitを行わなければならないかと思います。 それを、また別の人が同じようにローカルに取り込むと同じようにコミット履歴が出来上がり、プッシュした際には、そのコミット履歴までリモートリポジトリに残ってしまいます。 こちらは、同じコミット履歴がリモートに残ったとしても問題はないのでしょうか?
maisumakun

2020/08/31 13:37 編集

> リモートの変更をローカルに取り込むということをした際に、ローカル側ではadd,commitを行わなければならないかと思います。 理解か間違っています。pullあるいはfetch+(mergeまたはrebase)で取り込むものです。 (どのような手順で「リモートの変更をローカルに取り込む」作業を行っているのでしょうか?)
ruuuu

2020/08/31 13:39

あ、勿論「git pull origin master」で変更履歴は取り込んでいます。 この状態で、「git status」とすると、取り込んだ変更履歴が、ステージング環境に存在しているといった状態になっています。
maisumakun

2020/08/31 13:43 編集

pullした際にコンフリクトしたのではありませんか? (コンフリクトした場合は、辻褄が合うように修正してコミットする必要があります。この場合は、コミット履歴は増えてしかるべきものです)
maisumakun

2020/08/31 13:48

(通常、pullの際に「add,commitを行」う必要はないです)
ruuuu

2020/08/31 13:50

> pullした際にコンフリクトしたのではありませんか? あ、なるほどです... コンフリクトを修正した場合の変更履歴を、コミットするということですね... 仮にコンフリクトが起きなかった場合は、まぁその時は深く考えずコンフリクトがおきなかったんだなと、普通にコミットすれば良いですよね...
ruuuu

2020/08/31 13:51

>(通常、pullの際に「add,commitを行」う必要はないです) こちらですが、pullした際には、変更履歴が取り込まれて、「git status 」した際に、ステージングにファイルが追加されていたりしませんでしょうか?
maisumakun

2020/08/31 13:51

> 仮にコンフリクトが起きなかった場合は、まぁその時は深く考えずコンフリクトがおきなかったんだなと、普通にコミットすれば良いですよね... pull操作でコミットまで行われます。
ruuuu

2020/08/31 13:54 編集

うーん、何故か、「git pull origin master」を実行すると決まって、「git status」した際に、リモートの変更されたファイルがステージングに追加されているんですよね。。
maisumakun

2020/08/31 13:55

必要なファイルをgitignoreし忘れているとか、ビルド成果をコミットしているために必ずそのファイルが違ってくるとか、そういう事はありませんか?
ruuuu

2020/08/31 13:56

そして、「git commit -m ""」をすると、ステージングに追加されていたファイルが表示され、コミットされます。。
ruuuu

2020/08/31 13:59

> 必要なファイルをgitignoreし忘れているとか、ビルド成果をコミットしているために必ずそのファイルが違ってくるとか、そういう事はありませんか? 実は今回、Djangoで開発していたのですが、local用の仮想環境の為の「env」フォルダを管理下にいれてしまっていたのですが、そこは関係しているのかもしれませんね。。 ただ、envフォルダ以外の普通のファイルもステージングに入っているので、正直もう良く分からない状態です。。。
ruuuu

2020/08/31 14:00 編集

とりあえずは、このまま止まっていたも仕方がないので、全て、add、commitし開発を続けたいと思います。
maisumakun

2020/08/31 14:00

> ただ、envフォルダ以外の普通のファイルもステージングに入っているので、正直もう良く分からない状態です。。。 1つコンフリクトすれば、残りのファイルもステージングに位置することになります。
ruuuu

2020/08/31 14:00

長々とご親切にご助言頂き、ありがとうございました。
ruuuu

2020/08/31 14:02

>1つコンフリクトすれば、残りのファイルもステージングに位置することになります。 もしかしたら、最初のgitで管理するべきフォルダなどを間違えてしまったことが問題だったのかもしれませんね。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問