git merge ничего не меняет, в то время как git log показывает историю слияния - PullRequest
0 голосов
/ 18 марта 2019

Я работаю над веткой A, в то время как другие разработчики работают над веткой B.

Я хотел перенести все в ветке B в ветку A. Я клонировал обе ветви в своей локальной сети.

То, что я сделал после прочтения одного из сообщений SO:

git checkout branch B
git pull 
git checkout branch A
git merge branch B

И сообщение о слиянии было следующим:

Auto-merging fileBar
Merge made by the 'recursive' strategy.
 .../file               | 92 ++++++++++++++++++----
 file1     |  9 ++-
 .../file2          |  2 +-
 .../file3                       |  6 +-
 .../file4                     |  4 +-
 .../file5              |  2 +-
 file6   |  2 +-
 .../file7               |  4 +-
 8 files changed, 91 insertions(+), 30 deletions(-)

Однако я ожидал решить какой-то конфликт слияния, я был удивленэтот мерзавец не кричит на меня из-за этого.

Итак, что я сделал после этого пункта:

git status

Это показывает, что ничего в моем месте не изменилось, странно?

тогда я сделал:

git log

, который показывает:

Author: me <me@gmail.com>
Date:   Mon Mar 18 14:47:00 2019 -0400

Merge branch 'B' into A

Я также пытался вытащить ветвь B в то время как на ветке A:

git pull origin branchB

, но это говоритэто обновление на сегодняшний день:

From https://github.com/myGit/myRepo
 * branch              BranchB -> FETCH_HEAD
Already up to date.

Однако, когда я вхожу в Git, эти репозитории явно не совпадают на удаленном.

На данный момент, я запутался.что здесь случилось?Как вытащить ветку B в ветку A?

Обновление: я только что узнал, что когда я это сделал:

git checkout branch B
git pull

Новые изменения фактически не извлекались.когда я делал git pull, он говорит, что он уже обновлен, хотя явно нет.У моего местного все еще есть старая версия ветви B. Как?На данный момент меня все смущает

Что я пробовал:

git fetch --all
git reset --hard origin/BranchB

Ничего из этого не сработало

1 Ответ

0 голосов
/ 19 марта 2019

Кажется, что все работает правильно.

git checkout branch B
git pull 
git checkout branch A
git merge branch B

После того, как вы запустили вышеописанное, A было объединено с B (что вы подтвердили с помощью git log и git pull origin branchB).

git status правильно показал, что в рабочем дереве не было поэтапных / неустановленных изменений, все изменения фиксируются слиянием.

Тот факт, что не было конфликтов, являетсябит более сложный .Вы можете рассмотреть методы работы с ветвями, которые зависят друг от друга .Самый простой способ использовать ветви - это работать с изолированными «функциональными ветками», которые не зависят друг от друга.Вы объединяете ветки в master, когда они готовы, а затем вытягиваете master в другие ветки, чтобы поддерживать их в актуальном состоянии.

Удаленные ветки (на GitHub) не будут обновлятьсяпока вы не наберете git push, что не похоже на то, что вы сделали.

Кроме того, похоже, что теперь вы сбросили A, чтобы он стал таким же, как B (git reset --hard origin/BranchB)и потенциально потерял любую работу, которую вы сделали на A.Чтобы исправить это, используйте git reflog, чтобы просмотреть историю ваших последних действий, а затем выполните git reset --hard $REFLOG_HASH, где HASH - это числа слева от действия, в котором вы произвели слияние, - чтобы выможет reset ваше рабочее дерево к этому моменту истории.И тогда вы можете использовать git push для обновления пульта.

...