git」タグアーカイブ

Gitのコミット差分から必要なファイルだけを抜き出してZIP化する方法

新しく追加したファイルや、更新したファイルだけをまとめて渡したいときはありませんか?
すべてのファイルを送るのは容量が大きくなってしまいますし、手間もかかりますよね。
そんなときは、Gitのコマンドを使うことで、コミット間の差分ファイルだけを自動で抜き出し、ZIPファイルにまとめることができます。

こんな場面で便利です

  • チームメンバーに「この変更分だけ送ってほしい」と頼まれたとき
  • サーバーに差分だけアップロードしたいとき
  • バックアップやレビュー用に、変更ファイルだけをまとめたいとき

手順

1. コマンド一つで差分ファイルをZIP化できます

以下のコマンドを使用します。

コマンドの解説

$ git archive --prefix=archive/ <ブランチ名> `git diff --name-only <前のコミット> <後のコミット> --diff-filter=d` -o archive.zip
  • git diff --name-only <前のコミット> <後のコミット> --diff-filter=d
    追加・更新されたファイル名だけをリストアップします(削除されたファイルは除外されます)。
  • git archive --prefix=archive/ <ブランチ名> ... -o archive.zip
    指定したファイルだけを、archive/フォルダにまとめてZIP化します。
2. 具体例

例えば、abc1234 から def5678 までの差分を抜き出したい場合は、次のように入力します。

$ git archive --prefix=archive/ main `git diff --name-only abc1234 def5678 --diff-filter=d` -o archive.zip<br>
  • main はブランチ名です。必要に応じて変更してください。
  • archive.zip という名前でZIPファイルが作成されます。

まとめ

この方法を使うことで、余計なファイルを含めず、必要な差分だけを簡単にまとめて渡すことができます。
「すべて送るにはデータ量が多過ぎ!」と感じたときは、ぜひこの方法をお試しください。

gitであるファイルを元に戻す方法

元に戻したいファイルのログを表示

foo.txtのログ(変更履歴)を表示する

$ git log foo.txt

実行結果

commit 51ab9a2761dd5f506c8d7ce93f69512c873e1869
Author: Kensuke ARAKAWA <miyavi@ojarumaru.jp>
Date:   Mon Nov 11 17:23:07 2019 +0900

    feat: something

commit 1f5f1d153407402e3a6c45d0d0a27a7b7af46746
Author: Kensuke ARAKAWA <miyavi@ojarumaru.jp>
Date:   Fri Nov 8 19:01:08 2019 +0900

    feat: something

commit 45eeb1882ac48110ac87bd6a6b4b23b6da27be95
Author: Kensuke ARAKAWA <miyavi@ojarumaru.jp>
Date:   Tue Nov 5 18:06:51 2019 +0900

    feat: something

元に戻す

例えば、commit 1f5f1d153407402e3a6c45d0d0a27a7b7af46746 に戻す場合は、

$ git checkout 1f5f1d153407402e3a6c45d0d0a27a7b7af46746 foo.txt
$ git checkout [commit] [filepath]

特定のファイルだけを前のコミットに戻す

特定のファイルだけを元に戻す方法

戻したいコミットのハッシュを調べる

$ git log

どのファイルが更新されたかは、

$ git log --stat

で確認することができる。

元に戻す

$ git checkout <hash> <filepath>

<hash>に元に戻したいコミットのハッシュを指定。

High Sierraでgitが使えなくなったら

MacをHigh Sierraにアップグレードしたところ、gitが使えなくなってしまった

$ git xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

Developerツールを再インストールさせなければならないらしい。

unity$ xcode-select --install
xcode-select: note: install requested for command line developer tools

確認ダイアログが出るのでOKを押せば、インストールが始まる。インストールを完了すると、これまで通り、gitが使える様になる。

Via! https://e-yota.com/idle_talk/mac-os-high-sierra_git_xcrun_error/

既存のレポジトリに.gitignoreを後から反映させる方法

あとから、.gitignoreを設置したけど、一発で.gitignoreを全体に反映させる。

一気に、レポジトリから削除(除外)

以下のコマンドで、.gitignoreから除外を反映させる

$ git rm --cached `git ls-files --full-name -i --exclude-from=.gitignore`

確認&反映

$ git status
$ git commit -m 'Reflected .gitignore'

via!
あとからまとめて.gitignoreする方法