На разветвленных ветвях ГИТ - PullRequest
1 голос
/ 23 января 2012

У меня есть несколько вопросов о следующей последовательности событий.

Над этим кодом работают 2 разработчика. Во-первых, что заставляет ветви расходиться в первую очередь?

11:05:08 ~/myApp $ git status
# On branch Dev
# Your branch and 'origin/Dev' have diverged,
# and have 1 and 3 different commit(s) each, respectively.
#
nothing to commit (working directory clean)
11:10:39 ~/myApp $ git push origin Dev:Dev
To ssh://git@mygitserver/myApp-web.git
 ! [rejected]        Dev -> Dev (non-fast-forward)

error: failed to push some refs to 'ssh://git@mygitserver/myApp-web.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

Как предложил Git, я попытался сделать пул из remote/Dev в локальный Dev, только чтобы увидеть:

11:10:51 ~/myApp $ git pull origin Dev:Dev
From ssh://mygitserver/myApp-web
 ! [rejected]        Dev        -> Dev  (non-fast-forward)

Однако Git pull работает. Почему git pull сработал и git pull origin Dev: Dev не удалось?

11:13:05 ~/myApp $ git pull
Merge made by recursive.
 WebContent/BL/a.jsp               |   14 +++++-------
 WebContent/RJ/b.jsp               |    3 +-
 .../RJ/c.jsp                      |   22 ++++++++++----------
 WebContent/RJ/d.jsp               |   14 ++++++------
 WebContent/TM/e.jsp               |   12 ++++------
 5 files changed, 31 insertions(+), 34 deletions(-)

Последующие git status и git push origin Dev:Dev работали без приключений.

Ответы [ 2 ]

1 голос
/ 23 января 2012

Чтобы визуализировать расхождение, вам нужно было сравнить git log Dev на обеих машинах.

1 голос
/ 23 января 2012

Ветви расходятся, когда изменения произошли на удаленном И в ваших локальных репозиториях, воспринимайте это как неявные ветви: два (или более) коммитов с одним и тем же родительским коммитом. Кто-то отправил новые коммиты в хранилище, а вы зафиксировали локально без синхронизации (слияние или перебазирование)

Что касается git pull origin Dev:Dev не работает:

git pull s manpage описывает его использование как:

git pull [options] [<repository> [<refspec>...]]

часть refspec сообщает git, какие (удаленные) ссылки должны слиться с локальными ссылками. Таким образом, он позволяет выполнять только быстрые обновления, чтобы предотвратить потерю истории.

Возможно, вы хотели обновить ветку удаленного отслеживания, а не локальную:

git pull origin dev:refs/remotes/origin/dev

Хотя существует краткая запись для вашего варианта использования:

git pull origin dev:

git pull без аргументов обновит все ветви отслеживания для настроенного удаленного (обычно origin) и объединит первый refspec с текущей веткой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...