Как объединить две ветви без потери файлов, которые не содержатся в другой? - PullRequest
0 голосов
/ 03 октября 2018

В настоящее время я работаю над проектом с различными функциями, и для каждого из них я создал отдельную ветку.

Все мои файлы в настоящее время в мастер.Но каждый раз, когда я создаю новую ветвь, я удаляю все файлы и сохраняю только относящиеся к функции ветки в этих ветвях.

Мой вопрос: как я могу объединить ветку функции в основную ветку, фактически не удаляя вседругие файлы?

Например: ветка Master содержит файлы login.html, menu.html и contact.html В ветке Feature есть только файл feature.html.

На мастере ветви при выполнении

функция git merge

Все файлы удаляются из главной ветви, и сохраняется только файл feature.html, но я хотел, чтобы все они были в главной ветви, включая функцию.html.

1 Ответ

0 голосов
/ 03 октября 2018

Вы должны не удалять файлы из проекта в новой ветке ... но в любом случае, давайте предположим, что это необходимо по любой причине.Если я собираюсь в конечном итоге объединить ветку на master, то я, вероятно, сделаю небольшую хитрость, чтобы избежать появления этой проблемы ... но это требует немного дополнительной работы.Я бы удалил файлы при первом коммите новой ветки и больше ничего не сделал бы с этой ревизией.Затем, когда я хочу слить обратно с master, я бы не просто слился, но я бы выбрал (или перебазировал) вишню, отбрасывая коммит, в котором я удалил файлы, и затем я бы слил ветку rebased / cherry-pick.

Давайте предположим, что я создаю ветку feature1 из master и делаю там 3 ревизии ... что-то вроде:

git checkout -b feature1 master
git rm index.html blahblah.html # delete the files I don't want to keep on the branch
git commit -m "Removing the files I don't want"
# work
git commit -m "First real revision of feature 1"
# more work
git commit -m "Second revision of feature 1"

На данный момент я готов слиться с master ... затем яне просто объединить функцию 1, потому что это приведет к удалению файлов, потому что я сделал это с первой ревизией feature1, верно? ... Я бы отбросил первую ревизию, а затем слился с master, и это можно сделать относительно легко.

git checkout --detach master # go back to master
git cherry-pick feature1~2..feature1 # only cherry-pick the last 2 revisions
git checkout master # go back to master again
git merge --no-ff HEAD@{1} -m "Merging feature 1" # merge rebased branch

Это должно сделать.Но я не думаю, что вы все равно должны удалять файлы.

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