Что нажимает git . HEAD:refs/for/foo делать?

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

git push origin HEAD:refs/for/foo

но не получилось с ошибкой, что изменение уже закрыто. Затем я по глупости попытался:

git push . HEAD:refs/for/foo

который казался успешным, но когда я проверил Геррита, нового патча не было. Я думаю, что отчасти причина заключалась в том, что мой комментарий к коммиту не содержал идентификатора изменения Gerrit, который я хотел нажать. Но что на самом деле делала последняя команда? И как я могу это отменить?


person tony19    schedule 16.10.2012    source источник


Ответы (2)


Аргумент «.» означает «отправить в этот репозиторий», а refspec HEAD:refs/for/foo означает «взять текущую фиксацию, на которую указывает HEAD, и создать новую ссылку (похожую на ветку, хотя они обычно хранятся как refs/heads/something) с именем refs/for/foo это указывает на тот же коммит».

По сути, это создает новую «ветвь» в текущем коммите, но, поскольку желаемое имя не находится в обычном пространстве имен ветки, мы не можем просто использовать git branch refs/for/foo.

Вы должны иметь возможность отменить это с помощью git push . :refs/for/foo - именования пустого источника для замены ссылки.

person twalberg    schedule 16.10.2012

git push принимает не только удаленные имена, но и адреса (см. Git URL в документации). В частности, он принимает пути к локальным репозиториям, поэтому . — это просто текущий репозиторий, и вы создали в нем новую ссылку.

Вы можете удалить его, как обычно, с помощью:

git push . :refs/for/foo
person Michał Politowski    schedule 16.10.2012