Также проверьте include-what-you-use , который решает подобную проблему.
Мерзавец автоматически обнаружит перемещение/переименовывание, если Ваша модификация не будет слишком серьезна. Всего git add
новый файл, и git rm
старый файл. git status
затем покажет, обнаружило ли это переименовывание.
дополнительно, для перемещает каталоги, Вы, возможно, должны:
git add -A .
git status
, чтобы проверить, что "новый файл" является теперь "переименованным" файлом , Если состояние мерзавца все еще показывает "новый файл" и не "переименовало" Вас, должно следовать совет Gay’s Мотка и сделать перемещение и изменить в двух отдельных фиксациях.
Это - весь перцептивная вещь. Мерзавец обычно довольно хорош в распознавании перемещений, потому что МЕРЗАВЕЦ средство отслеживания содержания
Все, что действительно зависит, то, как Ваша "статистика" отображает его. Единственной разницей здесь является флаг-M.
журнал мерзавца - журнал мерзавца-M
commit 9c034a76d394352134ee2f4ede8a209ebec96288
Author: Kent Fredric
Date: Fri Jan 9 22:13:51 2009 +1300
Category Restructure
lib/Gentoo/Repository.pm | 10 +++++-----
lib/Gentoo/{ => Repository}/Base.pm | 2 +-
lib/Gentoo/{ => Repository}/Category.pm | 12 ++++++------
lib/Gentoo/{ => Repository}/Package.pm | 10 +++++-----
lib/Gentoo/{ => Repository}/Types.pm | 10 +++++-----
5 files changed, 22 insertions(+), 22 deletions(-)
статистики - статистика
commit 9c034a76d394352134ee2f4ede8a209ebec96288
Author: Kent Fredric
Date: Fri Jan 9 22:13:51 2009 +1300
Category Restructure
lib/Gentoo/Base.pm | 36 ------------------------
lib/Gentoo/Category.pm | 51 ----------------------------------
lib/Gentoo/Package.pm | 41 ---------------------------
lib/Gentoo/Repository.pm | 10 +++---
lib/Gentoo/Repository/Base.pm | 36 ++++++++++++++++++++++++
lib/Gentoo/Repository/Category.pm | 51 ++++++++++++++++++++++++++++++++++
lib/Gentoo/Repository/Package.pm | 41 +++++++++++++++++++++++++++
lib/Gentoo/Repository/Types.pm | 55 +++++++++++++++++++++++++++++++++++++
lib/Gentoo/Types.pm | 55 -------------------------------------
9 files changed, 188 insertions(+), 188 deletions(-)
журнал справки мерзавца
-M
Detect renames.
-C
Detect copies as well as renames. See also --find-copies-harder.
git diff -M
или git log -M
должен автоматически обнаружить такие изменения как переименовывают с незначительными изменениями , пока они действительно. Если Ваш незначительные изменения не незначительны, можно уменьшить подобие threashold, например,
$ git log -M20 -p --stat
для сокращения его от значения по умолчанию 50% к 20%.
Сделайте перемещение и изменение в отдельных фиксациях.
Вот быстрое и грязное решение для одного или нескольких переименованных и измененных файлов, которые не были зафиксированы.
Допустим, файл был назван foo
, и теперь он с именем bar
:
Переименовать bar
в временное имя:
mv bar side
Оформить заказ foo
:
git checkout HEAD foo
Переименуйте foo
в bar
с помощью Git:
git mv foo bar
Теперь переименуйте временный файл обратно в bar
.
mv side bar
Этот последний шаг возвращает ваше измененное содержимое обратно в файл.
Хотя это может сработать, если перемещенный файл слишком отличается по содержанию от исходного, git сочтет более эффективным решить, что это новый объект. . Позвольте мне продемонстрировать:
$ git status
On branch workit
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: .gitignore
renamed: README -> README.md
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: README.md
modified: work.js
$ git add README.md work.js # why are the changes unstaged, let's add them.
$ git status
On branch workit
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: .gitignore
deleted: README
new file: README.md
modified: work.js
$ git stash # what? let's go back a bit
Saved working directory and index state WIP on dir: f7a8685 update
HEAD is now at f7a8685 update
$ git status
On branch workit
Untracked files:
(use "git add <file>..." to include in what will be committed)
.idea/
nothing added to commit but untracked files present (use "git add" to track)
$ git stash pop
Removing README
On branch workit
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: .gitignore
new file: README.md
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: README
modified: work.js
Dropped refs/stash@{0} (1ebca3b02e454a400b9fb834ed473c912a00cd2f)
$ git add work.js
$ git status
On branch workit
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: .gitignore
new file: README.md
modified: work.js
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: README
$ git add README # hang on, I want it removed
$ git status
On branch workit
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: .gitignore
deleted: README
new file: README.md
modified: work.js
$ mv README.md Rmd # Still? Try the answer I found.
$ git checkout README
error: pathspec 'README' did not match any file(s) known to git.
$ git checkout HEAD README # Ok the answer needed fixing.
$ git status
On branch workit
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: .gitignore
new file: README.md
modified: work.js
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: README.md
modified: work.js
Untracked files:
(use "git add <file>..." to include in what will be committed)
Rmd
$ git mv README README.md
$ git status
On branch workit
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: .gitignore
renamed: README -> README.md
modified: work.js
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: work.js
Untracked files:
(use "git add <file>..." to include in what will be committed)
Rmd
$ mv Rmd README.md
$ git status
On branch workit
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: .gitignore
renamed: README -> README.md
modified: work.js
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: README.md
modified: work.js
$ # actually that's half of what I wanted; \
# and the js being modified twice? Git prefers it in this case.