Git push в новую ветку. Основы Git - Работа с удалёнными репозиториями. Отображение удалённых репозиториев



Как загрузить ветку с git? (4)

У меня есть проект на GitHub. Я создал ветку на одном компьютере, а затем переместил мои изменения в github с помощью

Git push origin branch-name

Теперь я на другом компьютере, и я хочу загрузить эту ветку. Поэтому я попробовал:

Git pull origin branch-name

Но все это означало переписывание моей ветви мастера изменениями в моей новой ветке.

Что мне нужно сделать, чтобы правильно потянуть мою удаленную ветку?

Git clone и cd в имени репо:

$ git clone https://github.com/PabloEzequiel/iOS-AppleWach.git Cloning into "iOS-AppleWach"... $ cd iOS-AppleWach

Перейдите на ветку (страница GitHub), которую я хочу:

$ git checkout -b gh-pages origin/gh-pages Branch gh-pages set up to track remote branch gh-pages from origin. Switched to a new branch "gh-pages"

И потяните ветку:

$ git pull Already up-to-date.

$ ls index.html params.json stylesheets

$ git clone https://github.com/lukeredpath/LRResty.git $ cd LRResty

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

$ git branch * master

Проверьте ветку, которую вы хотите, в моем случае она называется «arcified»:

$ git checkout -b arcified origin/arcified Branch arcified set up to track remote branch arcified from origin. Switched to a new branch "arcified"

Подтвердите, что вы используете ветку, которую хотите:

$ git branch * arcified master

Если вы хотите позже обновить код, запустите git pull:

$ git pull Already up-to-date.

Перейдите в папку на новой машине, которую вы хотите загрузить с git на git bash.

Используйте нижеприведенную команду для загрузки кода из любой отрасли, которая вам нравится

git clone "git ssh url" -b "Branch Name"

Он загрузит соответствующий код ветвления.



Как загрузить ветку с git? (4)

Git clone и cd в имени репо:

$ git clone https://github.com/PabloEzequiel/iOS-AppleWach.git Cloning into "iOS-AppleWach"... $ cd iOS-AppleWach

Перейдите на ветку (страница GitHub), которую я хочу:

$ git checkout -b gh-pages origin/gh-pages Branch gh-pages set up to track remote branch gh-pages from origin. Switched to a new branch "gh-pages"

И потяните ветку:

$ git pull Already up-to-date.

$ ls index.html params.json stylesheets

У меня есть проект на GitHub. Я создал ветку на одном компьютере, а затем переместил мои изменения в github с помощью

Git push origin branch-name

Теперь я на другом компьютере, и я хочу загрузить эту ветку. Поэтому я попробовал:

Git pull origin branch-name

Но все это означало переписывание моей ветви мастера изменениями в моей новой ветке.

Что мне нужно сделать, чтобы правильно потянуть мою удаленную ветку?

$ git clone https://github.com/lukeredpath/LRResty.git $ cd LRResty

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

$ git branch * master

Проверьте ветку, которую вы хотите, в моем случае она называется «arcified»:

$ git checkout -b arcified origin/arcified Branch arcified set up to track remote branch arcified from origin. Switched to a new branch "arcified"

Подтвердите, что вы используете ветку, которую хотите:

$ git branch * arcified master

Если вы хотите позже обновить код, запустите git pull:

$ git pull Already up-to-date.

Перейдите в папку на новой машине, которую вы хотите загрузить с git на git bash.

Используйте нижеприведенную команду для загрузки кода из любой отрасли, которая вам нравится

git clone "git ssh url" -b "Branch Name"

Он загрузит соответствующий код ветвления.

Чтобы иметь возможность совместной работы над каким-либо Git-проектом, необходимо знать, как управлять удалёнными репозиториями. Удалённые репозитории — это модификации проекта, которые хранятся в интернете или ещё где-то в сети. Их может быть несколько, каждый из которых, как правило, доступен для вас либо только на чтение, либо на чтение и запись. Совместная работа включает в себя управление удалёнными репозиториями и помещение (push ) и получение (pull ) данных в и из них тогда, когда нужно обменяться результатами работы. Управление удалёнными репозиториями включает умение добавлять удалённые репозитории, удалять те из них, которые больше не действуют, умение управлять различными удалёнными ветками и определять их как отслеживаемые (tracked) или нет и прочее. Данный раздел охватывает все перечисленные навыки по управлению удалёнными репозиториями.

Чтобы разобрать примеры этой главы я создал удаленный репозитарий TestRemote на GitHub, а затем склонировал его себе.

Отображение удалённых репозиториев

Чтобы просмотреть, какие удалённые серверы у вас уже настроены, следует выполнить команду git remote . Она перечисляет список имён-сокращений для всех уже указанных удалённых дескрипторов. Если вы склонировали ваш репозиторий, у вас должен отобразиться, по крайней мере, origin — это имя по умолчанию, которое Git присваивает серверу, с которого вы склонировали:

Чтобы посмотреть, какому URL соответствует сокращённое имя в Git, можно указать команде опцию -v :

Добавление удалённых репозиториев

Чтобы добавить новый удалённый Git-репозиторий под именем-сокращением, к которому будет проще обращаться, выполните git remote add [сокращение] :

Теперь вы можете использовать в командной строке имя tr вместо полного URL.

Например, я сделал некоторые изменения файла README.md и теперь загрузим их себе в локальный репозиторий командой git fetch :

Теперь ветка изменений с сервера доступна локально как tr/mater. Вы можете слить (merge) её в одну из своих веток или перейти на эту ветку, если хотите её проверить.

Тут надо отметить, что между командами git pull и git fetch есть разница, но об этом чуть позже.

На данный момент, если мы посмотрим содержимое файла README.md в рабочем каталоге, то оно будет точно такое же, как было до команды git fetch. Это потому, что мы в данный момент находимся в ветке master локального репозитария, которая не была изменена.

Чтобы посмотреть все существующие ветки можно дать команду git branch с ключом –a , который покажет все ветки репозитория.

Здесь активная ветка обозначена звёздочкой. А так же мы видим ветку которую мы притянули командой git fetch – это ветка remotes/tr/master. Собственно об этом нам команда git fetch и сообщила после выполнения.

Переключится на ветку можно командой git checkout <имя ветки>

И так мы переключились на ветку которую стянули командой git fetch, о чем нам выдалось сообщение и рассказали какие файлы были обновлены. Это файл README.md. Теперь в рабочем каталоге мы можем посмотреть измененное содержимое этого файла (мы его меняли непосредственно на GitHub).

Мы так же можем переключится обратно на нашу ветку master

Теперь будем разбираться с разницей между fetch и pull .

Fetch и Pull

Как вы только что узнали, для получения данных из удалённых проектов, следует выполнить:

$ git fetch [имя удал. сервера]

Данная команда связывается с указанным удалённым проектом и забирает все те данные проекта, которых у вас ещё нет . После того как вы выполнили команду, у вас должны появиться ссылки на все ветки из этого удалённого проекта. Теперь эти ветки в любой момент могут быть просмотрены или слиты (объединены).

Когда вы клонируете репозиторий, команда clone автоматически добавляет этот удалённый репозиторий под именем origin . Таким образом, git fetch origin извлекает все наработки, отправленные (push ) на этот сервер после того, как вы склонировали его (или получили изменения с помощью fetch ) . Важно отметить, что команда fetch забирает данные в ваш локальный репозиторий, но не сливает (не объединяет) их с какими-либо вашими наработками и не модифицирует то, над чем вы работаете в данный момент . Вам необходимо вручную слить эти данные с вашими, когда вы будете готовы.

Если у вас есть ветка, настроенная на отслеживание удалённой ветки, то вы можете использовать команду git pull . Она автоматически извлекает и затем сливает (объединяет) данные из удалённой ветки в вашу текущую ветку . Этот способ может для вас оказаться более простым или более удобным. К тому же по умолчанию команда git clone автоматически настраивает вашу локальную ветку master на отслеживание удалённой ветки master на сервере , с которого вы клонировали (подразумевается, что на удалённом сервере есть ветка master). Выполнение git pull , как правило, извлекает (fetch ) данные с сервера , с которого вы изначально склонировали, и автоматически пытается слить (объеденить) (merge ) их с кодом, над которым вы в данный момент работаете .

$ git push origin master

Эта команда срабатывает только в случае, если вы клонировали с сервера, на котором у вас есть права на запись, и если никто другой с тех пор не выполнял команду push . Если вы и кто-то ещё одновременно клонируете, затем он выполняет команду push , а затем команду push выполняете вы, то ваш push точно будет отклонён. Вам придётся сначала вытянуть (pull ) их изменения и объединить с вашими. Только после этого вам будет позволено выполнить push .

Я выполнил команды pull и объединил изменения для файла README.md и затем залил их на сервер GitHub. Скрин привожу просто для информации чтобы было видно как это делается.

Более подробно как отправлять (push ) данные на удалённый сервер мы рассмотрим чуть позже.

Инспекция удалённого репозитория

Если хотите получить побольше информации об одном из удалённых репозиториев, вы можете использовать команду git remote show [удал. сервер] . Если вы выполните эту команду с некоторым именем, например, origin, вы получите что-то подобное:

Она выдаёт URL удалённого репозитория, а также информацию об отслеживаемых ветках. Эта команда любезно сообщает вам, что если вы, находясь на ветке master , выполните git pull , ветка master с удалённого сервера будет автоматически влита в вашу сразу после получения всех необходимых данных . Она также выдаёт список всех полученных ею ссылок.

Данная команда так же показывает какая именно локальная ветка будет отправлена на удалённый сервер по умолчанию при выполнении git push . Она также показывает, каких веток с удалённого сервера у вас ещё нет, какие ветки всё ещё есть у вас, но уже удалены на сервере.

Удаление и переименование удалённых репозиториев

Для переименования ссылок в новых версиях Git"а можно вылолнить git remote rename , это изменит сокращённое имя, используемое для удалённого репозитория. Например, если вы хотите переименовать tr в tstrmt, вы можете сделать это следующим образом:

Стоит упомянуть, что это также меняет для вас имена удалённых веток. То, к чему вы обращались как tr/master, стало tstrmt/master.

Если по какой-то причине вы хотите удалить ссылку (вы сменили сервер или больше не используете определённое зеркало, или, возможно, контрибьютор перестал быть активным), вы можете использовать git remote rm :

Чтобы иметь возможность совместной работы над каким-либо Git-проектом, необходимо знать, как управлять удалёнными репозиториями. Удалённые репозитории — это модификации проекта, которые хранятся в интернете или ещё где-то в сети. Их может быть несколько, каждый из которых, как правило, доступен для вас либо только на чтение, либо на чтение и запись. Совместная работа включает в себя управление удалёнными репозиториями и помещение (push ) и получение (pull ) данных в и из них тогда, когда нужно обменяться результатами работы. Управление удалёнными репозиториями включает умение добавлять удалённые репозитории, удалять те из них, которые больше не действуют, умение управлять различными удалёнными ветками и определять их как отслеживаемые (tracked) или нет и прочее. Данный раздел охватывает все перечисленные навыки по управлению удалёнными репозиториями.

Чтобы разобрать примеры этой главы я создал удаленный репозитарий TestRemote на GitHub, а затем склонировал его себе.

Отображение удалённых репозиториев

Чтобы просмотреть, какие удалённые серверы у вас уже настроены, следует выполнить команду git remote . Она перечисляет список имён-сокращений для всех уже указанных удалённых дескрипторов. Если вы склонировали ваш репозиторий, у вас должен отобразиться, по крайней мере, origin — это имя по умолчанию, которое Git присваивает серверу, с которого вы склонировали:

Чтобы посмотреть, какому URL соответствует сокращённое имя в Git, можно указать команде опцию -v :

Добавление удалённых репозиториев

Чтобы добавить новый удалённый Git-репозиторий под именем-сокращением, к которому будет проще обращаться, выполните git remote add [сокращение] :

Теперь вы можете использовать в командной строке имя tr вместо полного URL.

Например, я сделал некоторые изменения файла README.md и теперь загрузим их себе в локальный репозиторий командой git fetch :

Теперь ветка изменений с сервера доступна локально как tr/mater. Вы можете слить (merge) её в одну из своих веток или перейти на эту ветку, если хотите её проверить.

Тут надо отметить, что между командами git pull и git fetch есть разница, но об этом чуть позже.

На данный момент, если мы посмотрим содержимое файла README.md в рабочем каталоге, то оно будет точно такое же, как было до команды git fetch. Это потому, что мы в данный момент находимся в ветке master локального репозитария, которая не была изменена.

Чтобы посмотреть все существующие ветки можно дать команду git branch с ключом –a , который покажет все ветки репозитория.

Здесь активная ветка обозначена звёздочкой. А так же мы видим ветку которую мы притянули командой git fetch – это ветка remotes/tr/master. Собственно об этом нам команда git fetch и сообщила после выполнения.

Переключится на ветку можно командой git checkout <имя ветки>

И так мы переключились на ветку которую стянули командой git fetch, о чем нам выдалось сообщение и рассказали какие файлы были обновлены. Это файл README.md. Теперь в рабочем каталоге мы можем посмотреть измененное содержимое этого файла (мы его меняли непосредственно на GitHub).

Мы так же можем переключится обратно на нашу ветку master

Теперь будем разбираться с разницей между fetch и pull .

Fetch и Pull

Как вы только что узнали, для получения данных из удалённых проектов, следует выполнить:

$ git fetch [имя удал. сервера]

Данная команда связывается с указанным удалённым проектом и забирает все те данные проекта, которых у вас ещё нет . После того как вы выполнили команду, у вас должны появиться ссылки на все ветки из этого удалённого проекта. Теперь эти ветки в любой момент могут быть просмотрены или слиты (объединены).

Когда вы клонируете репозиторий, команда clone автоматически добавляет этот удалённый репозиторий под именем origin . Таким образом, git fetch origin извлекает все наработки, отправленные (push ) на этот сервер после того, как вы склонировали его (или получили изменения с помощью fetch ) . Важно отметить, что команда fetch забирает данные в ваш локальный репозиторий, но не сливает (не объединяет) их с какими-либо вашими наработками и не модифицирует то, над чем вы работаете в данный момент . Вам необходимо вручную слить эти данные с вашими, когда вы будете готовы.

Если у вас есть ветка, настроенная на отслеживание удалённой ветки, то вы можете использовать команду git pull . Она автоматически извлекает и затем сливает (объединяет) данные из удалённой ветки в вашу текущую ветку . Этот способ может для вас оказаться более простым или более удобным. К тому же по умолчанию команда git clone автоматически настраивает вашу локальную ветку master на отслеживание удалённой ветки master на сервере , с которого вы клонировали (подразумевается, что на удалённом сервере есть ветка master). Выполнение git pull , как правило, извлекает (fetch ) данные с сервера , с которого вы изначально склонировали, и автоматически пытается слить (объеденить) (merge ) их с кодом, над которым вы в данный момент работаете .

$ git push origin master

Эта команда срабатывает только в случае, если вы клонировали с сервера, на котором у вас есть права на запись, и если никто другой с тех пор не выполнял команду push . Если вы и кто-то ещё одновременно клонируете, затем он выполняет команду push , а затем команду push выполняете вы, то ваш push точно будет отклонён. Вам придётся сначала вытянуть (pull ) их изменения и объединить с вашими. Только после этого вам будет позволено выполнить push .

Я выполнил команды pull и объединил изменения для файла README.md и затем залил их на сервер GitHub. Скрин привожу просто для информации чтобы было видно как это делается.

Более подробно как отправлять (push ) данные на удалённый сервер мы рассмотрим чуть позже.

Инспекция удалённого репозитория

Если хотите получить побольше информации об одном из удалённых репозиториев, вы можете использовать команду git remote show [удал. сервер] . Если вы выполните эту команду с некоторым именем, например, origin, вы получите что-то подобное:

Она выдаёт URL удалённого репозитория, а также информацию об отслеживаемых ветках. Эта команда любезно сообщает вам, что если вы, находясь на ветке master , выполните git pull , ветка master с удалённого сервера будет автоматически влита в вашу сразу после получения всех необходимых данных . Она также выдаёт список всех полученных ею ссылок.

Данная команда так же показывает какая именно локальная ветка будет отправлена на удалённый сервер по умолчанию при выполнении git push . Она также показывает, каких веток с удалённого сервера у вас ещё нет, какие ветки всё ещё есть у вас, но уже удалены на сервере.

Удаление и переименование удалённых репозиториев

Для переименования ссылок в новых версиях Git"а можно вылолнить git remote rename , это изменит сокращённое имя, используемое для удалённого репозитория. Например, если вы хотите переименовать tr в tstrmt, вы можете сделать это следующим образом:

Стоит упомянуть, что это также меняет для вас имена удалённых веток. То, к чему вы обращались как tr/master, стало tstrmt/master.

Если по какой-то причине вы хотите удалить ссылку (вы сменили сервер или больше не используете определённое зеркало, или, возможно, контрибьютор перестал быть активным), вы можете использовать git remote rm :

// echo get_the_post_thumbnail(get_the_ID(), "relatedthumbnail"); // вывожу свой размер миниатюры?>

Иногда при работе с локально и удаленной веткой нам требуется их удалять. Например эта ветка отдельной функциональности которая уже слита в develop или master. Или это ветка для устранения багов. Давайте посмотрим как можно легко и быстро удалять локальные (local) и удаленные (remote) ветки.

Быстрый ответ — финальное резюме

$ git push -d $ git branch -d

Замечу, что в большинстве случаев удаленный репозиторий записан как origin .

Удаляем локальную ветку

Чтобы удалить локальную ветку используем одну из следующих команд:

$ git branch -d branch_name $ git branch -D branch_name

Пояснение: ключ -d это ярлык команды --delete , которая удаляет ветку, только если последняя полностью смержена в ее upstream ветку. Можно также использовать команду -D , которая является алиасом команды --delete --force , которая удаляет ветку «невзирая на ее мерж статус» (независимо объединяли вы ее с вышестоящей upsream веткой ли нет).

Удаление удаленной remote ветки

В Git версии v1.7.0 , вы можете удалить remote ветку используя

$ git push --delete

что возможно легче запомнить, чем команду

$ git push :

которая была добавлена в Git v1.5.0 «чтобы удалить удаленную remote ветку или тег tag.»

Начиная с Git v2.8.0 вы также можете использовать git push с опцией -d как ярлык вместо --delete .

Более того, версия гита которая у вас установлена будет определять какой синтаксис использовать, более легкий или более сложный.

Удалить удаленную remote ветку

Цитата из 3-ей главы книги Pro Git Скотта Чакона:

Удаление Удалённых Веток

Полагаю вы завершили с работой в удаленной ветке, вы и ваши сотрудники закончили с новой фичей и смержили ее в вашу mster ветку на удаленном репозитории. Вы можете удалить удаленную ветку используя довольно тупой синтаксис git push : . Если вы хотите удалить вашу bugfix ветку с фиксом багов на сервере, вы запускаете следующую команду:

$ git push origin:serverfix To :schacon/simplegit.git - serverfix

Бабах! И не больше такой ветки на вашем сервере. Наверное вам захочется поставить закладку на эту страницу, потому что вам еще понадобится эта команда, и вы скорее всего забудете как она пишется. Способ чтобы запомнить эту команду, вспомнить прошлую git push : синтаксис которой мы рассматривали немного ранее. Если вы оставите , тогда вы буквально скажите следующее “Возьми ничего с моей стороны и сделай это .”

Я использовал git push origin:bugfix и это отлично работает.

После, вам следует выполнить эту команду на других машинах разработчиков:

Git fetch --all --prune

чтобы распространить изменения.