Я только что создал ветку от master
под названием new_branch
Итак, я извлекаю эту новую ветку, добавляю новый файл, а затем добавляю/фиксирую/нажимаю.
git add new_file.php
git commit -m "A new file"
git push origin new_branch
Итак, после этого я клонировал свой пример репо, и дело в том, что этот файл, который я добавил в новую ветку, не находится в главной ветке клонированного рабочего дерева. Что мне делать, чтобы найти этот новый файл в основной ветке клонированного рабочего дерева?
ПРИМЕЧАНИЕ: извините за неточность названия. Может кто захочет поменять.
Аргумент new_branch
относится к ветке на origin
, которую следует обновить, а не к ветке в вашем локальном репозитории для отправки от. Это всегда та ветвь, которая в данный момент извлечена (это ветвь местный, также называемая new_branch
).
@chepner да, вы правы: я только что проверил ветку new_branch
в своем клонированном репо и могу найти файл. Но как я могу автоматически получить этот файл в ветке master
после клонирования?
Есть несколько способов, но какой из них вы выберете, зависит от того, какие отношения вы хотите между master
и new_branch
. Вы можете объединить new_branch
в master
; вы можете выбрать один коммит от new_branch
до master
; вы можете проверить new_branch
(добавив new_file
в свой рабочий каталог , then check out
master` (оставив new_file
как неотслеживаемый файл в вашем рабочем каталоге), а затем зафиксировать new_file
в master
, как если бы это был совершенно новый файл.
Какой вариант вы выберете, может также зависеть от ответа на вопрос «Почему вы в первую очередь зафиксировали new_file
в new_branch
вместо master
?»
@chepner хорошо, я читал, что для внесения изменений я должен создать новую ветку, внести изменения, а затем добавить/зафиксировать/отправить их.
Читать где? Как правило, вы делаете это с намерением объединить ветку обратно с веткой, от которой вы исходно ответвились. Существуют различные рабочие процессы, которым можно следовать при использовании Git; ветки являются лишь частью реализации каждого рабочего процесса, и вы не можете сказать, что какое-либо конкретное использование ветки само по себе является правильным или неправильным.
@chepner, так что для того, чтобы мой новый файл был в ветке master
, мне придется сделать последний шаг git push origin master
, верно? в этом нет ничего плохого, верно?
Вероятно, нет, учитывая этот простой пример, но обычно вы не перенаправляете одну ветку в другую другую ветку. Либо git checkout master; git merge new_branch; git push origin
, либо просто добавьте new_file
к master
в первую очередь, не создавая новую ветку.
Ваш вопрос указывает на то, что вы не до конца поняли, что такое ветка и что такое ветка master. Я бы рекомендовал читать больше и делать уроки.
Чтобы ответить на вопрос с помощью очень простого рабочего процесса, который вы могли бы использовать: я предполагаю, что «new_branch» — это ветка функций, и ваш рабочий процесс заключается в объединении веток функций в одну основную ветку (классический, простой рабочий процесс git). переключиться на основную ветку:
git checkouter master
объединить вашу функцию:
git merge new_branch
(исправить конфликты слияния, так как вы просто добавляете файл, их не должно быть) опубликовать изменения:
git push origin
Теперь вы объединили свою новую функцию с основной веткой, и каждый клон будет содержать вашу функцию. Как упоминал @chepner, git предлагает гораздо больше возможностей, однако для изучения и понимания веток это простая отправная точка.
Похоже, вы путаете
master
(фактическая ветка) сHEAD
(указатель для ветки, указывающей, на какую ветвь будет влиятьgit commit
и др.). Вы зафиксировали новый файл вnew_branch
, а неmaster
, и это ветка, на которую вы нажали. Поэтому, когда вы снова клонируете удаленный репозиторий, вам нужно снова проверитьnew_branch
, чтобы увидетьnew_file
.