но я обнаружил, что запрос на получение включает в себя множество других коммитов (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