git перезаписывает мои изменения старой версией от master - PullRequest
0 голосов
/ 05 июля 2019

Я смотрел на похожие вопросы по stackoverflow, но ни один из них не дал мне работающего решения.

В текущем проекте, над которым я работаю, у нас есть несколько ветвей:

  • master: функции добавляются туда, как только они подтверждают свою стабильность.
  • X ветки функций: каждый разработчик отходит от мастера, работает над своей функцией и запрашивает ее, как только это будет сделано.

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

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

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

Однако, и здесь есть проблема, git, похоже, не показывает мне все конфликты слияний, которые на самом деле существуют.Чтобы взять простой пример, давайте просто предположим, что в моей собственной ветке я переименовал класс A в NewA и соответствующим образом обновил все ссылки.Теперь я и человек B оба касаемся метода Z, я в основном рефакторинг его, человек Z просто добавляет несколько исправлений к известным проблемам.При слиянии показываются некоторые конфликты, когда код другой. Но кажется, что другие не делают этого, потому что все мои ссылки на NewA были возвращены обратно в A, без , не говоря мне об этом.

Для записи, при слиянии я делаю что-то вроде этого:

commit&push all my changes to my branch
git pull origin master

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

TL; DR: IsЕсть ли способ остановить git от переписывания изменений, которые я сделал, не сказав мне?(Я знаю, что могу заставить свои изменения иметь приоритет, но я тоже не хочу этого делать. Мне нужно просматривать каждое изменение вручную. И я также не могу сделать коммиты cherry-pick, так как всегда должен бытьработает над базовой версией master, которая актуальна.)

Редактировать: Когда я запускаю как мастер-версию файла, так и файл из моей ветки через случайный онлайн-инструмент сравнения, он ЯСНО показываетЯ имею в виду все различия, и не просто притворяюсь, что показываю некоторые вещи, хотя и на самом деле преобладает.Почему git не может сделать то же самое с вещами, которые должны быть явно перезаписаны моей версией кода, вместо того, чтобы перезаписывать их старой версией?

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

...