Как настроить отслеживание удаленной ветки в git для возможности выполнения команды git pull?

Как настроить отслеживание удаленной ветки в Git и как это вообще работает? Какую команду использовать, чтобы настроить отслеживание ветки `test` для отслеживания удаленной ветки `origin/dev`, и как обеспечить возможность забирать изменения с `dev`, но пушить коммиты в свои собственные ветки?
  • 29 января 2024 г. 16:48
Ответы на вопрос 3
Для того, чтобы настроить отслеживание удаленной ветки в Git, вам необходимо добавить упоминание об удаленной ветке к вашей локальной ветке. Таким образом, команды `git pull` и `git push` будут знать, откуда забирать и куда отправлять изменения.

Чтобы настроить отслеживание ветки `test` для отслеживания удаленной ветки `origin/dev`, выполните следующие шаги:

1. Создайте локальную ветку `test`, если она еще не существует:
   ```sh
   git branch test
   ```

2. Выполните следующую команду для настройки локальной ветки `test` на отслеживание удаленной ветки `origin/dev`:
   ```sh
   git branch --set-upstream-to=origin/dev test
   ```

Или же выполните обе операции в одном шаге, создав новую ветку и сразу настроив её отслеживание:
   ```sh
   git checkout -b test --track origin/dev
   ```

После этого вы сможете забирать изменения из `origin/dev`, выполняя `git pull`, находясь в локальной ветке `test`.

Чтобы же пушить коммиты из `test` в другую ветку, предположим `origin/my-feature`, вы можете использовать команду `git push` с указанием ветки, куда хотите пушить:
```sh
git push origin test:my-feature
```

Это позволит вам отправлять изменения из локальной ветки `test` в удаленную ветку `my-feature` на `origin`.

Для более тонкой настройки поведения `git pull` и `git push`, вы можете настроить push.default в вашем Git конфиге. Например, если вы хотите, чтобы `git push` автоматически пушал изменения в ветку с тем же именем на удаленном репозитории, установите `push.default` в значение `simple`:
```sh
git config --global push.default simple
```

После этой настройки, если ваша локальная ветка называется `test` и отслеживается удаленная ветка `origin/dev`, выполнение `git push` без указания ветки отправит изменения в `origin/test`.
То есть должен забирать с dev но пушить в свои ветки по названиям.

А вот так лучше не делать - однажды себе в ногу выстрелишь. Плюс ко всему, история слияний, ПР и другие вещи станут спагетти, а не деревом.

Делай отдельную ветку для фичи/экспериментов, а если нужны обновления, то git merge
git pull вытягивает изменения с удалённой ветки, связанной с локальной веткой (в гите это называется upstream). Ваша ветка test связана с origin/test, поэтому git pull без указания названия ветки будет тянуть коммиты из origin/test. 

Попробуйте так (находясь в ветке test):

git pull origin/dev
Похожие вопросы