Sourcetree и Git Bash не синхронизированы? - PullRequest
0 голосов
/ 22 ноября 2018

Насколько я понимаю, Sourcetree и Git Bash - это просто пользовательский интерфейс (просмотр), который смотрит на одну и ту же модель (состояние git-репо).Поэтому они должны показывать одно и то же состояние (после обновления).

Но я только что сделал rebase -i через SourceTree и, возможно, некоторые неправильные операции, теперь у меня есть два интерфейса, сообщающие о разных состояниях:

  1. Sourcetree (и Eclise Egit тоже) думали, что мое репо чистое, и я даже мог по желанию проверять различные ветви

  2. Гит Баш думал, что явсе еще в середине интерактивной перебазировки и покажите состояние как (где foo является определенной ветвью)

    (foo | REBASE-i 1/1)

Когда я сделал rebase --continue в Git Bash, я получил эти ошибки:

$ git rebase --continue
error: update_ref failed for ref 'refs/heads/foo': cannot lock ref 'refs/heads/foo': is at 70b13393524028fbeb15b853b3d058f6802f961b but expected 827b12fb1ddb5599e744d0bc07ec831d1ef0c843
error: could not update refs/heads/foo

Как это возможно?

Как я могу выручить?

Спасибо!

1 Ответ

0 голосов
/ 22 ноября 2018

Я предоставляю свой собственный ответ здесь.

По той же ошибке (но, возможно, по разным причинам) существует популярный способ решения проблемы с помощью команды

git gc --prunce=now

См. ЭтоSO ответ

Но это не решило мою проблему.

Наконец, я включил и выключил питание своей машины, а затем запустил

git rebase --abort

И затемпроблема ушла.Я думаю, что произошло то, что был какой-то мертвый процесс, удерживающий некоторый объект файловой системы, и это препятствовало правильной работе git rebase --abort перед циклом питания.

Однако, в конце концов, я все еще не понимаю, почему Sourcetree (и Eclipse / Egit и Git GUI) сообщали о другом состоянии из Git bash (очевидно, это был последний, который сообщал о неправильном состоянии).

...