Сливаем ветки, не сливаясь с давних времен - PullRequest
0 голосов
/ 05 мая 2018

Я столкнулся с этой проблемой из-за собственной небрежности.

Сценарий:

У меня есть две ветви master и branch1. С самого начала у них нет файла .gitignore (это моя большая ошибка). Теперь статус branch1 равен

Эта ветвь на 12 коммитов вперед, 4 на коммит позади мастера.

Всякий раз, когда я pull master в branch1, у меня возникают конфликты во многих файлах, которые должны быть в .gitignore файле (скажем, *.unwantedFileExtensions). Я старался изо всех сил разрешать конфликты, но когда я пытаюсь построить программу, она выдает исключения / ошибки.

После этого я явно добавил файл .gitignore в обе ветви, чтобы игнорировать все файлы *.unwantedFileExtensions, но при объединении я сталкиваюсь с одинаковыми конфликтными файлами.

Я застрял здесь. Кто-нибудь знает, как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

gitignore"преднамеренно указывает неотслеживаемых файлов для игнорирования."

Ваши файлы уже отслежены; Gitignore не работает задним числом. Он игнорирует только новые файлы.


Сначала включите конфликты, объедините их, как считаете нужным, а затем совершите объединение.

  • git pull
  • Исправьте файлы по своему вкусу на основе конфликтов (откройте в текстовом редакторе по вашему выбору)
  • Добавить и зафиксировать объединенные файлы git commit -a

Теперь, когда мы познакомились с мастером, давайте заставим git забыть об этих игнорируемых файлах. Git будет думать, что эти файлы удалены, но они все еще будут доступны локально. Затем мы передадим эти файлы, которые больше не отслеживаются.

  • фиксировать / хранить любые изменения в игнорируемых файлах
  • очистить указатель / область подготовки (полностью) git rm -r --cached .
  • добавить все обратно (файлы в .gitignore будут игнорироваться!) git add .
  • Теперь необходимо удалить эти файлы из индекса git (но не из нашего рабочего каталога) git commit -m "Fix untracked files"

Теперь branch1 обновлен с master и корректно игнорирует файлы, сохраняя их локально.

0 голосов
/ 05 мая 2018

Оформите каждую ветку, добавьте файлы для игнорирования в .gitignore, также удалите эти файлы. Затем подготовьте и передайте .gitignore и удаленные файлы в каждой ветви.

После этого вы можете объединить две ветви, и больше не должно возникать конфликтов для нежелательных файлов.

Таким образом:

git checkout master
rm -rf *.unwantedFileExtensions
echo "*.unwantedFileExtensions" >> .gitignore
git add .gitignore *.unwantedFileExtensions
git commit -m "removed unwantedFileExtensions"

git checkout branch1
# repeat the steps above from branch master for this branch
git merge master
...