Разница между именем origin/branch_name и branch_name?

для нажатия на битбакет.

Если я это сделаю: git push origin origin/branch_name мои коммиты не нажаты.

Total 0 (delta 0), reused 0 (delta 0)

Если я сделаю git push origin branch_name, мои коммиты будут нажаты:

Counting objects: 160, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (13/13), done.
Writing objects: 100% (20/20), 2.10 KiB | 0 bytes/s, done.
Total 20 (delta 6), reused 0 (delta 0)

Итак, что такое начало/значение перед именем branch_name? И почему это имеет значение?

Ответ 1

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

  • (Чисто) локальные ветки, т.е. филиалы, которые вы делаете,
  • Филиалы, которые живут в удаленном хранилище, из-за отсутствия лучшего термина. Возможно, вы знаете удаленный репозиторий под удаленным именем, например origin. С этой точки зрения, однако, такая ветвь является локальной. Добро пожаловать в распределенный контроль версий! :)
  • Удаленное отслеживание веток. Также просто называется удаленными ветками, как в Pro Git book, но я нахожу эту фразу запутанной; удаленное отслеживание веток более точное. Это специальные локальные ветки, единственной целью которых является отображение состояния веток, которые находятся в удаленном хранилище во время вашего последнего взаимодействия с сервером. В частности, вы не можете фиксировать ветки этого типа.

Здесь branch_name является локальной ветвью, тогда как origin/branch_name является ветвью удаленного отслеживания; он отражает состояние соответствующей ветки, которая живет в origin.

Сразу после запуска

git fetch

ветвь удаленного отслеживания origin/master и соответствующая ветвь, которая находится в origin, должны быть идеально синхронизированы (конечно, по модулю одновременных проталкиваний на удаленный сервер). Тогда не должно быть сюрпризом, что

git push origin origin/branch_name

ничего не выдвигает: вы, по сути, пытаетесь выдвинуть вещи, которые уже присутствуют в предке соответствующей ветки, которая живет в origin.

Однако, если ваша локальная ветвь, branch_name, опережает одну или несколько фиксаций,

enter image description here

затем работает

git push origin branch_name

будет выдавать коммиты, содержащиеся в branch_name, но не в ветке, которая находится в origin:

enter image description here

Ответ 2

с помощью графического просмотра дерева (например, gitk --all) покажет вам, что origin/mybranch и mybranch могут отличаться.

origin - это просто имя по умолчанию для клонированного пульта, который (в вашем случае) содержит ветвь mybranch (как и ваш локальный репозиторий)

поэтому, когда вы просите нажать origin/mybranch на origin, вы синхронизируете удаленный пульт origin с самим собой, поэтому он ничего не делает (к счастью, пульт всегда синхронизируется с самим собой).

имя origin является произвольным и может быть установлено с флагом --origin при клонировании.

Ответ 3

  • origin/branch_name - это ветка на удаленной машине.
  • just branch_name - это ветвь на локальной машине

Ответ 4

происхождение - это то, что хранится удаленно на github

без источника - это то, что хранится локально на вашем компьютере.

когда вы совершаете 1-й, вы локально выполняете свой компьютер.

когда вы нажимаете имя ветки начала, которое вы нажимаете на github