LoginSignup
3
1

More than 3 years have passed since last update.

commit 履歴を保持したままディレクトリ移動

Posted at

概要

  • git mv を行うと git log -p 使用時に履歴を閲覧できない
  • filter-branch で過去の commit 内でディレクトリを移動することで閲覧できる
git filter-branch -f --prune-empty --tree-filter '
dir="path/to/movedir"
if [ ! -e "$dir" ]
then
    mkdir -p "$dir"
    git ls-tree --name-only $GIT_COMMIT | xargs -I files mv files "$dir"
fi'

git mv 使用時

$ git init
Initialized empty Git repository in /private/tmp/git-log/.git/

# README.md 作成, 編集の commit 作成
$ touch README.md
$ git add README.md
$ git commit -m "Initial Commit"
[master (root-commit) 0cb6fee] Initial Commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md

$ echo "git log の確認" >> README.md
$ git add README.md
$ git commit -m "README.md 編集"
[master 2f6c8a2] README.md 編集
 1 file changed, 1 insertion(+)
git log を確認します
$ git log -p README.md
commit 2f6c8a27507e9838485412cf8499cdd1632c6af0 (HEAD -> master)
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:09:00 2019 +0900

    README.md 編集

diff --git a/README.md b/README.md
index e69de29..7923e00 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+git log の確認

commit 0cb6fee47f54cb31ef07f4ad5a9b748306661aa9
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:08:26 2019 +0900

    Initial Commit

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e69de29
README.md を移動した後に git log を確認してみます
# README.md の移動
$ mkdir foo
$ git mv README.md foo/README.md
$ git commit -m "README.md 移動"
[master c3bbb6d] README.md 移動
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename README.md => foo/README.md (100%)

$  git log -p foo/README.md
commit c3bbb6d43f95f9500ec7255d3e031521a87937ae (HEAD -> master)
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:11:40 2019 +0900

    README.md 移動

diff --git a/foo/README.md b/foo/README.md
new file mode 100644
index 0000000..7923e00
--- /dev/null
+++ b/foo/README.md
@@ -0,0 +1 @@
+git log の確認
  • diff --git a/foo/README.md b/foo/README.md コマンドを発行しているようなので過去の履歴が見れません。

git filter-branch 使用時

README.md の移動前の commit から。
$ git log
commit c3bbb6d43f95f9500ec7255d3e031521a87937ae (HEAD -> master)
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:11:40 2019 +0900

    README.md 移動

commit 2f6c8a27507e9838485412cf8499cdd1632c6af0
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:09:00 2019 +0900

    README.md 編集

commit 0cb6fee47f54cb31ef07f4ad5a9b748306661aa9
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:08:26 2019 +0900

    Initial Commit

$ git checkout -b filter-branch 2f6c8a27507e9838485412cf8499cdd1632c6af0
Switched to a new branch 'use-filter-branch'
filter-branch で移動後 git log で確認
$ git filter-branch -f --prune-empty --tree-filter '
dir="foo"
if [ ! -e "$dir" ]
then
    mkdir -p "$dir"
    git ls-tree --name-only $GIT_COMMIT | xargs -I files mv files "$dir"
fi'

$ git log -p foo/README.md
commit 3ae7d6d4ce007282e189b3ed5b56303990eca082 (HEAD -> use-filter-branch)
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:09:00 2019 +0900

    README.md 編集

diff --git a/foo/README.md b/foo/README.md
index e69de29..7923e00 100644
--- a/foo/README.md
+++ b/foo/README.md
@@ -0,0 +1 @@
+git log の確認

commit 867f6f0d570bad36cd0deaae073ea67f690d1cb0
Author: otsuka.kentaro <kentaro_otsuka@metaps.com>
Date:   Fri Oct 11 09:08:26 2019 +0900

    Initial Commit

diff --git a/foo/README.md b/foo/README.md
new file mode 100644
index 0000000..e69de29

まとめ

  • 普段 GUI ツールで git 操作を行っているので git mvgit logの挙動を初めて知った。
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1