Обновление подмодуля GIT * удаляет незафиксированные файлы

У меня есть репозиторий GIT и внутри несколько ПОДМОДУЛЕЙ.

Проблема в том, что каждый раз, когда кто-то обновляет подмодуль, я пытаюсь обновить свои файлы, вызывая:

$ git submodule update

Но что происходит, так это то, что он удаляет все мои незафиксированные файлы, что очень раздражает.
Я попытался сначала зафиксировать и отправить файлы, но это не позволяет мне отправить:

error: failed to push some refs to 'ssh://dev.ancreative.co.uk/var/git/library/Blocks.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'non-fast-forward'
section of 'git push --help' for details.*

Итак, я пытаюсь позвонить git submodule update, но затем происходит это удаление.

Кто-нибудь знает, что может вызвать эту проблему? Большое спасибо.


person pdolinaj    schedule 23.12.2010    source источник


Ответы (1)


обновление подмодуля git не поможет решить проблему "не перемотать вперед".
Он будет извлекать только ту ссылку, на которую ссылается родительский репозиторий.
Он ничего не извлекает.

Кроме того, как указано в книге по git:

git submodule update проверяет конкретный коммит, а не верхушку ветки.
Это похоже на проверку тега: голова отсоединена, поэтому вы не работаете с веткой.

$ git branch
* (no branch)
master

Если вы хотите внести изменения в подмодуль и у вас есть отдельная голова, вам следует создать или проверить ветку, внести свои изменения, опубликовать изменение в подмодуле, а затем обновить суперпроект, чтобы он ссылался на новый коммит:

$ git checkout master

Таким образом, тот факт, что обновление удаляет ваши файлы (даже если оно зафиксировано первым), может быть связано с тем, что вы находитесь в отдельной ветке. (Примечание: вы все еще можете вернуть свои коммиты, сделанные в этой отдельной ветке после того, как 'git submodule update' стер все с помощью смотрим журнал ссылок)

Оказавшись в нужной ветке внутри подмодуля, вы можете:

  • попробуй push
  • если это не удается из-за ситуации без быстрой перемотки вперед, вы можете git pull сначала выполнить слияние с последними удаленными фиксациями.
  • затем снова push
  • наконец, вернитесь в родительский репозиторий и commit там, чтобы зарегистрировать новый SHA1 вашего подмодуля.
person VonC    schedule 23.12.2010