Вопрос прост: refs/heads/master
то же самое, что и refs/remotes/origin/master
? Если это не в некоторых случаях, как я могу узнать, когда это не так, и что это такое?
Является ли "refs/heads/master" таким же, как "refs/remotes/origin/master" в Git?
Ответ 1
Это два разных символических имени, которые могут указывать на разные вещи. refs/heads/master
- это ветвь в вашей рабочей копии с именем master
. Часто это ветвь отслеживания refs/remotes/origin/master
, потому что origin
является именем по умолчанию для удаленного, созданного git clone
, и его первичная ветка обычно также называется master
.
Вы можете увидеть разницу между ними с git rev-list refs/heads/master..refs/remotes/origin/master
, которая будет пуста, если они будут одинаковыми и в противном случае перечислит коммиты между ними.
Ответ 2
Ключевое различие заключается в том, что ветки под refs/heads/
являются ветвями, которые, когда у вас есть один извлеченный файл, можно продвигать, создавая новые коммиты. Тем не менее, в разделе refs/remotes/
есть так называемые "ветки удаленного отслеживания" - эти ссылки просто указывают на фиксацию того, что удаленный репозиторий был в последний раз, когда вы сделали git fetch <name-of-remote>
, или успешный git push
для соответствующая ветвь в этом удаленном репозитории. (Я написал сообщение в блоге, в котором говорится об этой разности в некоторой степени здесь.)