Должен работать автоматически, благодаря обнаружению переименования. Ниже приведен пример сеанса:
$ git init test
Initialized empty Git repository in /tmp/jnareb/test/.git/
$ cp ~/git/README . # example file, large enough so that rename detection works
$ git add .
$ git commit -m 'Initial commit'
[master (root-commit) b638320] Initial commit
1 files changed, 54 insertions(+), 0 deletions(-)
create mode 100644 README
$ git checkout -b new-feature
Switched to a new branch 'new-feature'
$ git mv README README.txt
$ git commit -m 'Renamed README to README.txt'
[new-feature ce7b731] Renamed README to README.txt
1 files changed, 0 insertions(+), 0 deletions(-)
rename README => README.txt (100%)
$ git checkout master
Switched to branch 'master'
$ sed -e 's/UNIX/Unix/g' README+ && mv -f README+ README
$ git commit -a -m 'README changed'
[master 57b1114] README changed
1 files changed, 1 insertions(+), 1 deletions(-)
$ git merge new-feature
Merge made by recursive.
README => README.txt | 0
1 files changed, 0 insertions(+), 0 deletions(-)
rename README => README.txt (100%)
Если бы вы выполняли «git merge master» в ветке «new-feature» вместо, как и выше, «git merge new-feature» в «master», вы получите:
$ git merge master
Merge made by recursive.
README.txt | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
Не могли бы вы сказать, что вы делали по-другому?
Обратите внимание, что обычные git rebase (и git pull --rebase) не принимают переименования: вам нужно запустить git rebase -m или интерактивную rebase.