2011-01-16 4 views
44

Я использую Git и вручную переименовал файл, который я добавил в репозиторий. Теперь я добавил «новый» файл, который я переименовал в репозиторий, но Git жалуется, что «старый» файл был удален. Итак, как я могу заставить Git забыть о старом файле? Еще лучше, как я могу сказать Git, что «новый» файл действительно является «новым» файлом, чтобы я мог сохранить историю изменений целыми?Git: переименован файл вручную, Git confused

+3

'git mv old new' по существу просто' git rm --cached old; mv старый новый; git add new', с некоторыми дополнительными умениями. Git идентифицирует переименования, ища аналогичный контент, поэтому он будет определять их независимо от того, используете ли вы git mv. То есть, нет никакого способа, чтобы * сказать *, что эти два файла соответствуют. – Cascabel

+0

Возможный дубликат [Как сделать git отмеченным удаленным и новым файлом в качестве перемещения файла?] (Http://stackoverflow.com/questions/433111/how-to-make-git-mark-a-deleted-and -a-new-file-as-a-file-move) –

ответ

6

Во-первых, отменить ваш поставил добавить для вручную переместить файл:

$ git reset path/to/newfile 
$ mv path/to/newfile path/to/oldfile 

Затем, используя Git, чтобы переместить файл:

$ git mv path/to/oldfile path/to/newfile 

Конечно, если вы уже совершили ручной ход, вы можете захотеть сбросить до версии перед перемещением, а затем просто git mv оттуда.

+2

Эта последняя команда выдала ошибку: fatal: не под управлением версии – mmersz

+0

просто нужно было: git добавить oldfile перед последней командой. СПАСИБО ЯНВАРЯ! – mmersz

2

Попробуйте это:

mv new old 
git rm new 
git mv old new 
+0

Это не работает. Git по-прежнему не помещает файл как переименованный. –

39

Там нет никаких проблем. Просто git rm old или даже git add -A, и он поймет, что это переименование. Git увидит удаление плюс добавление с тем же содержимым, что и переименование.

Вам не нужно отменять, не использовать, использовать git mv и т. Д. git mv old new - это только короткая рука для mv old new; git rm old; git add new.

+9

Если старый файл уже ушел, вы должны использовать 'git rm --cached old', так как в дереве работ нет файла для удаления. – Cascabel

+1

Что делать, если вы перемещаете файл и меняете несколько строк, тогда 'git add -A'? Является ли Git достаточно умным, чтобы узнать, что файл _similar_ такой же, как старый файл? – Phil

+2

@Phil Да. Попробуй. –

0

Если эта ошибка возникает, это, вероятно, означает, что файл, который вы пытаетесь переместить, изначально не отслеживается git или каталог, в который вы пытаетесь переместить файл, не является каталогом git.

Смежные вопросы