Как удалить файл из запроса извлечения, который я не изменил - PullRequest
0 голосов
/ 11 мая 2018

Я не совсем уверен, как я попал в эту ситуацию, но я собираюсь отправить pull-запрос репо в Github, но я обнаружил, что pull-запрос включает в себя множество других коммитов (15 ) в другой файл, не связанный с веткой.

Файл, который я хочу сохранить, называется tuition_benefit.json, а файл, который я не хочу, называется employees.json. Как я могу удалить все коммиты, связанные с employees.json, из моей ветки, чтобы они не учитывались в запросе на удаление?

Я думаю, что я был в ветке, связанной с файлом employees.json (employees), когда я создал новую ветку (benefits-query), чтобы сделать этот новый файл tuition_benefit.json вместо master .

Я сделал только 3 коммита в этой новой ветке, а остальные 15, указанные в запросе на получение, все связаны с другим файлом, который я никогда не изменял в этой ветке.

1 Ответ

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

но я обнаружил, что запрос на получение включает в себя множество других коммитов (15) для другого файла, не связанного с веткой.

Это, вероятно,означает, что вы открыли свою ветку поверх какой-то другой ветки, или у вас есть локально измененная ветка master и ветвь от нее.

В любом случае, ваш репозиторий выглядит следующим образом.

A - B - C [origin/master]
         \
          D - E - F [others]
                   \
                    G - H - I [yours]

Это можно увидеть с помощью git log --decorate --graph.

origin/master - это ветвь master, когда она выглядит вверх по течению.yours - это ветка, которую вы хотите отправить.others представляет то, от чего вы разветвились yours;это может быть ваша локально измененная master или другая ветка.Только коммиты G - H - I имеют отношение к вашему пиару.

То, что вы хотите, - это ваша работа разветвленная от origin/master, как это.

          G - H - I [yours]
         /
A - B - C [origin/master]
         \
          D - E - F [others]

Вы можете сделать это с помощью перебазирования для воспроизведения G - H - I поверх origin/master.Но простой git rebase origin/master не подойдет.Если вы сделаете это, Git заменит все между yours и origin/master, включая D - E - F из others, ничего не добившись.Вы должны сказать это игнорировать D - E - F.Вы делаете это с помощью git rebase --onto <from> <to>.

git rebase --onto origin/master others yours

, который будет принимать все коммиты, начиная с (но не включая) others и до (включая) yours и переписывая их на origin/master,Это G - H - I.Тогда у вас будет это.

          G1 - H1 - I1 [yours]
         /
A - B - C [origin/master]
         \
          D - E - F [others]

Обратите внимание, что это G1 - H1 - I1.Это связано с тем, что rebase не переписывает историю, а создает новую историю.Это новые коммиты.Когда вы попытаетесь git push, оно будет отклонено, потому что это не простое обновление yours.Вы должны git push --force.

В сумме ...

  • git fetch (чтобы получить последнюю версию origin/master).
  • git checkout yours
  • Изучите git log --decorate --graph, чтобы определить, с чего начинается ваша работа.
  • git rebase --onto origin/master <last commit that's not yours> yours
  • Test.
  • git push --force
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...