Мой проект посчитали наследием, и я начал все сначала. Вот что я сделал:
Я проверил develop
в своем текущем проекте и создал новую refactor
ветку.
Затем я git rm *
удалил все файлы и начал все сначала.
Во время работы над новой веткой в исходную develop
ветку были внесены и зафиксированы некоторые изменения.
Теперь, когда я закончил с веткой refactor
, как мне безопасно объединить или перебазировать эту ветку в develop
, чтобы она полностью переопределяла?
Вот моя мысль:
Вариант 1. Просто поменять названия веток.
Это простое решение, но это должен быть последний вариант, потому что если я сделаю это в удаленных ветках, это запутает моих товарищей по команде. В следующий раз они git pull
не уверен, что они refactor
правильно выдернут ветку. скажи мне, если я ошибаюсь.
Вариант 2. Объединение
Вариант 3. Перебазировать
Может быть, выполнение rebase
будет означать повторение git rm *
в последнем коммите ветки develop
, чего я и хочу? Но что произойдет, если я сольюсь?
Похоже, вы хотите сохранить версию ветки refactor
независимо от того, что присутствует в ветке develop
. Если вы абсолютно уверены, что это так, то вы можете выполнить слияние с помощью стратегии наши. Это слияние должно выполняться с опцией -s
, которая просто сохраняет текущую версию, а не с опцией -X
, которая попадала бы на текущую версию только в случае конфликтов.
Это не следует путать с нашей стратегией слияния, которая вообще не учитывает, что содержит другое дерево. Оно отбрасывает все, что сделало другое дерево, заявляя, что наша история содержит все, что с ней произошло.
В вашем случае, поскольку для опции theirs
нет стратегии -s
, вам нужно выполнить пару слияний, чтобы «обмануть» Git, заставив его поверить, что изменения refactor
уже присутствуют в develop
.
# making sure to be on branch refactor
git checkout refactor
# creating a temporary branch from refactor and switching to it
git checkout -b temp
# merging develop into temp and keeping only the version from temp (i.e. refactor),
# this will result in a new merge commit on temp where every commit in develop is reachable from temp
git merge -s ours develop
# switching to branch develop
git checkout develop
# fast-forward merge as "every commit in develop is already contained in temp", keeping only temp's version (i.e refactor)
git merge temp
# deleting the temporary branch temp
git branch -d temp