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

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

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

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

Q&A

解決済

2回答

171閲覧

リモートにコミットしてしまったファイルを戻す方法

harumi

総合スコア407

Git

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

0グッド

0クリップ

投稿2018/09/13 09:28

gitを使って作業をしているのですが、本来であればignoreされているファイルをコミットに含めてpushしてしまいました。
不必要なファイルのみリモートから削除することは可能でしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは。

当該のファイルに対する削除コミットを使う手もあるかと思います。具体的な手順は以下です。

(1) .gitignore に追記する前にプッシュしてしまったファイルの、ローカル(手元)での最新版をどこか git レポジトリ以外のところ( /tmp など)にコピーしておく。

(2) 手元のレポジトリで、①そのファイルを削除し、②.gitignore にそのファイルを追記する、という①②を行って(他のファイルの修正もあれば、それも適宜含めて)コミット、プッシュする。(①のコマンドは git rm -f <ファイル名> )

(3) 上記 (1) でどこかにコピーしておいた当該ファイルを、レポジトリに再度コピーする。

(4) 当該ファイルに修正を加えても、git status で変更されたファイルとして認識されていないことを確認

以下は上記を使った簡単な事例のログです。

  • あるレポジトリに、ファイル a.txtb.txtc.txt の3点があり、これがGit管理下にあり、origin/master にプッシュされた直後です。この時点では、.gitignoreはありません。

shell

1[q146422 (master)]$ ls -a 2. .. .git a.txt b.txt c.txt 3[q146422 (master)]$ git status 4On branch master 5Your branch is up to date with 'origin/master'. 6 7nothing to commit, working tree clean 8[q146422 (master)]$ git log 9commit y6hgt6730okhf45(・・・略) (HEAD -> master, origin/master) 10Author: jun68ykt <jun68ykt> 11Date: Thu Sep 13 20:34:43 2018 +0900 12 13 initial commit 14
  • 3つのファイルを変更します。以下では、各ファイルに hello の1行を追記したので、 git status でみると、ステージされていない変更ファイルとして3つのファイルすべてが表示されています。

shell

1[q146422 (master)]$ echo "hello" >> a.txt 2[q146422 (master)]$ echo "hello" >> b.txt 3[q146422 (master)]$ echo "hello" >> c.txt 4[q146422 (master)]$ git status 5On branch master 6Your branch is up to date with 'origin/master'. 7 8Changes not staged for commit: 9 (use "git add <file>..." to update what will be committed) 10 (use "git checkout -- <file>..." to discard changes in working directory) 11 12 modified: a.txt 13 modified: b.txt 14 modified: c.txt 15 16no changes added to commit (use "git add" and/or "git commit -a")
  • ここで b.txt だけは Git の管理下から外したいとします。b.txt を /tmp にコピーしたあと、 git rm で削除します。

shell

1[q146422 (master)]$ cp -p b.txt /tmp 2[q146422 (master)]$ git rm -f b.txt 3rm 'b.txt'
  • .gitignore を作成します。(以下では、b.txt のみを含む.gitignoreをコマンドラインから作成していますが、もちろんエディタを使って編集してかまいません。)

shell

1[q146422 (master)]$ echo 'b.txt' > .gitignore 2[q146422 (master)]$ git status 3On branch master 4Your branch is up to date with 'origin/master'. 5 6Changes to be committed: 7 (use "git reset HEAD <file>..." to unstage) 8 9 deleted: b.txt 10 11Changes not staged for commit: 12 (use "git add <file>..." to update what will be committed) 13 (use "git checkout -- <file>..." to discard changes in working directory) 14 15 modified: a.txt 16 modified: c.txt 17 18Untracked files: 19 (use "git add <file>..." to include in what will be committed) 20 21 .gitignore 22
  • すべての変更をコミットしてプッシュします。

shell

1[q146422 (master)]$ git add *.txt 2[q146422 (master)]$ git add .gitignore 3[q146422 (master)]$ git status 4On branch master 5Your branch is up to date with 'origin/master'. 6 7Changes to be committed: 8 (use "git reset HEAD <file>..." to unstage) 9 10 new file: .gitignore 11 modified: a.txt 12 deleted: b.txt 13 modified: c.txt 14 15[q146422 (master)]$ git commit -m '2nd commit' 16[master b6200f0] 2nd commit 17 4 files changed, 3 insertions(+), 1 deletion(-) 18 create mode 100644 .gitignore 19 delete mode 100644 b.txt 20[q146422 (master)]$ git push 21Counting objects: 5, done. 22Delta compression using up to 4 threads. 23Compressing objects: 100% (2/2), done. 24Writing objects: 100% (5/5), 343 bytes | 343.00 KiB/s, done. 25Total 5 (delta 0), reused 0 (delta 0) 26To github.com:jun68ykt/q146422.git 27 46086d7..b6200f0 master -> master
  • /tmp にコピーしておいた b.txt を再度コピーしてレポジトリに戻し、修正を加えてから、 git diffgit statusを実行しても、 b.txt は表示されなくなりました。

shell

1[q146422 (master)]$ cp -i /tmp/b.txt . 2[q146422 (master)]$ echo "good night" >> b.txt 3[q146422 (master)]$ git status 4On branch master 5Your branch is up to date with 'origin/master'. 6 7nothing to commit, working tree clean 8[q146422 (master)]$ git diff 9[q146422 (master)]$ 10

以上参考になれば幸いです。

投稿2018/09/13 12:17

jun68ykt

総合スコア9058

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

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

0

プッシュしたものを取り消してやり直せば良いかと思います。
下記が参考になりそうです。
http://tweeeety.hateblo.jp/entry/2015/06/10/215753

投稿2018/09/13 09:33

n_takapyon

総合スコア443

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問