Перебазируйте ветвь B поверх ветки A и получите конечный результат того же содержимого, что и ветка B - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть:

O (origin/master) - - A (A)
                  \ 
                    - B (B)

A - это первая версия работы, выполненной в B, но, к сожалению, B не основана на A, вместо этого они являются отдельными коммитами.

A будет объединен с источником / мастером, который сначала создаст:

O - - A (origin/master)
  \
    - B

B будет объединен через несколько дней, и я хочу, чтобы код источника / мастера был точнотакой же, как код, который в настоящее время находится в коммите B.

Моими словами: я хочу добавить новый коммит в A, который удаляет все изменения, сделанные в A, и заменяет их наизменения с B.

Какой простой способ сделать это с помощью git?

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Я бы использовал программный сброс

git checkout --detach B
git reset --soft A # move to A revision, keep all differences between B and A in index
git commit -m "Setting up A to be just like B" # or whatever you want to write
git branch -f A
git checkout A

Этого должно хватить

0 голосов
/ 28 февраля 2019
git checkout A
git read-tree -um @ B
git commit

Дерево чтения с двумя деревьями (@ является синонимом HEAD) - это базовая операция команды, лежащая в основе проверки (также слияние с ускоренной перемоткой вперед), за вычетом части обновления HEAD.

0 голосов
/ 28 февраля 2019

Не очень ясно, какой конечный результат вы хотите, но это должно помочь вам на вашем пути:

git checkout master
git revert HEAD # revert the commit A
git checkout B
git rebase master # rebase B onto new master

теперь у вас будет:

* previous history
* A, origin/master
* master (commit reverting commit A)
* B

Я не сделалставить любые команды git push;Я оставлю это тебе.Если вы уже хотите включить работу по B в мастер:

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