Git нажмите слияние, но git pull уже обновлен. Пробовал reclone, та же проблема

Я делаю:

$ git commit .
$ git push
error: Entry 'file.php' not uptodate. Cannot merge.

Тогда я делаю

$ git pull
Already up-to-date.

Что мне делать? Я просто хочу получить последнюю версию из удаленной копии и перезаписать что-нибудь на моей локальной копии.

Изменить: Я все пробовал. Я удалил локальное репо и

$ git clone ssh://[email protected]/directory
...
Checking out files: 100%, done.

$ git status
On branch master
nothing to commit (working directory clean)

Все выглядит хорошо, не так ли? Потяните на всякий случай.

$ git pull
Already up-to-date.

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

$ git commit .
[master 1e18af1] Rando change
1 files changed, 2 insertions(+), 0 deletions(-)

$ git push
Counting objects: 13, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (7/7), 646 bytes, done.
Total 7 (delta 3), reused 0 (delta 0)
From /directory
d6d61aa..1e18af1  master     -> origin/master
error: Entry 'someotherfile.php' not uptodate. Cannot merge.
Updating b8f9a54..1e18af1
To  ssh://[email protected]/directory
d6d61aa..1e18af1  master -> master

У меня не знаю, что происходит! Как я могу совершать/тянуть снова нормально? Большое спасибо!

Ответ 1

Это просто догадка, но был ли ваш пульт открытым репо или рабочий каталог? Если это был рабочий каталог, а не голый репо, файл file.php на удаленной имел незафиксированные изменения. Ваша команда git push пыталась продвинуть HEAD на удаленном компьютере, что вызывало конфликты из-за незафиксированных изменений.

Вот почему вы обычно git pull обновляете рабочий каталог и используете git push на голых репозиториях. FYI, чтобы настроить голый репо для использования как нечто похожее на центральное CVS/SVN/etc repo, выполните следующие действия на пульте дистанционного управления:

$ mkdir my-git-repo
$ cd my-git-repo
$ git init --bare

Затем в вашем локальном репо:

$ cd my-git-repo.git
$ git remote add origin [email protected]:/path/to/my-git-repo/
$ git config branch.master.remote origin
$ git config branch.master.merge refs/heads/master
$ git push origin master

Теперь у вас есть голое репо, чтобы нажимать/втягивать/из того, что содержит основную ветвь. Вы можете повторить последние три локальных действия с любыми дополнительными локальными ветвями, которые вы хотите разместить на пульте дистанционного управления. Клонирование такое же, как и раньше, и вам не нужно использовать git config, поскольку пульт дистанционного управления устанавливается автоматически, а удаленные слияния refs устанавливаются при использовании ветвей отслеживания.

Надеюсь, что это поможет.

Ответ 2

Повторите попытку git checkout file.php, затем git push.

Update:

  • git pull указывает, что ветка обновлена?
  • git status не отображается какой-либо несвязанный файл?
  • git commit работает?

Если вы ответили "да" на все выше, и ваш git push продолжает терпеть неудачу даже после чистой копии удаленного репозитория (читайте git clone), это очень вероятно, что удаленный репозиторий имеет проблему с индексом.

Ответ 3

Попробуйте выполнить git status и проверьте, нет ли каких-либо изменений в файле file.php. Вам необходимо зафиксировать все изменения в одних и тех же файлах, или git может изменить ваш неприменимый файл.

Попробуйте сделать еще одну фиксацию после pull, а затем попытайтесь снова вытащить ее, просмотрите любое возможное слияние и нажмите данные.

Если вы хотите просто перезаписать локальную копию, проверьте файл file.php(git checkout HEAD^ file.php, чтобы проверить версию, предшествующую последней), в предыдущую версию, а затем вытащите из репозитория.

Ответ 4

Я бы вырезал и вставлял файл file.php локально из рабочей папки. На ваш рабочий стол можно сказать.

Затем выполните pull, затем git должен извлечь последний файл file.php с сервера. Затем просто вставьте копию файла file.php и перезапишите вытащив одну из них или откройте обе версии и просто вставьте свои изменения.

Я надеюсь, что это трюк.

Ответ 5

Вы уверены, что у вас уже нет file.php с другим случаем? (file.php или file.php...), как в этом ответе?

  • один уже совершает
  • один в вашем рабочем каталоге, в другом случае.