Как эффективно перебазировать, не позволяя фиксациям накапливаться локально?

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

Тем не менее, я хотел бы, чтобы мои коммиты были отправлены куда-нибудь на удаленный сервер перед перебазированием, особенно в тех случаях, когда локальное репо находится на локальном компьютере (что может привести к сбою HD и т. д.). Есть ли способ сделать это без нажатия --force? Я думал о создании какой-то промежуточной ветки my_work, но похоже, что это также приведет к проблеме «локального/удаленного расхождения». Может быть, есть умный (или не очень умный) способ сделать это, о котором я просто не подумал.


person Matt Phillips    schedule 10.04.2021    source источник
comment
Нет ничего плохого в том, чтобы принудительно толкнуть вашу ветку feature, предполагая, что вы единственный, кто работает над ней.   -  person Tim Biegeleisen    schedule 10.04.2021
comment
@TimBiegeleisen Если у меня выработается привычка принудительно нажимать feature, я вполне могу поскользнуться и принудительно нажать общедоступную ветку в какой-то момент. YMMV, но для меня лучше просто не допустить, чтобы эта привычка сформировалась в первую очередь.   -  person Matt Phillips    schedule 10.04.2021
comment
Нет. Рабочий процесс перебазирования, который вы используете, включает перебазирование feature на master, чтобы поместить первую ветвь непосредственно перед последней. Силовой толчок feature не является неправильным, и в любом случае его невозможно избежать.   -  person Tim Biegeleisen    schedule 10.04.2021
comment
Давайте разберемся с этой темой раз и навсегда: один из способов избежать того факта, что когда-нибудь вы можете принудительно отправить общедоступную общую ветку, состоит в том, чтобы не иметь одно зеркало общая ветка в вашем локальном репо в первую очередь. Я имею в виду, что вы не можете работать с локальными ветками функций, если решите не использовать локальную основную/разрабатываемую/любую ветку локально. Вот... Я сказал это. :-D Не то, чтобы принудительно вставить в общую ветку невозможно... но для этого требуется больше умысла: git push -f some-id-or-local-branch:main. Не вы можете сделать это случайно.   -  person eftshift0    schedule 10.04.2021
comment
Также нет ничего плохого в сохранении временной копии ветки. Я постоянно сохраняю ветки WIP (work in progress). Никто больше о них не знает, никто их не видит, они просто запасные. Это совершенно стандартная процедура; не волнуйся, будь счастлив.   -  person matt    schedule 10.04.2021
comment
@eftshift0 Я понимаю, к чему вы клоните, вы говорите, что работаете из локальной функциональной ветки, но просто сохраняете main или develop или что-то еще в качестве ветки удаленного отслеживания - просто никогда не проверяйте это на локальном.   -  person matt    schedule 10.04.2021
comment
Еще одна возможность заключается в резервном копировании на другой сервер. Я тоже так делаю постоянно (т.е. у меня два пульта).   -  person matt    schedule 10.04.2021
comment
да, @мат. И я везде вижу посты, где люди проверяют main/develop/что угодно, тянут, затем идут в свои ветки, тянут там... это так ненужно, если вы спросите меня: git checkout my-feature origin/master; Через несколько дней: git pull.   -  person eftshift0    schedule 10.04.2021
comment
и вы можете проверить их, если вам нужно.... просто проверить удаленную ветку: git checkout origin/main, чтобы она не создавалась локально.   -  person eftshift0    schedule 10.04.2021
comment
@eftshift0 о да, я вижу, вас предупредят, что вы находитесь в режиме отсоединенной головы, и вы просто злобно смеетесь и игнорируете предупреждение.   -  person matt    schedule 10.04.2021
comment
@eftshift0 Вы не можете объединить feature в master без локального извлечения master, не так ли?   -  person Matt Phillips    schedule 10.04.2021
comment
??? Ах, что? Вы имеете в виду, что слияние с удаленным мастером заставляет вас иметь локального мастера? Нисколько. Вы можете снять это, по-другому. Принятие происхождения — это пульт, с которым вы играете: git fetch origin; git checkout origin/master; git merge feature -m "my feature"; git push origin HEAD:master   -  person eftshift0    schedule 10.04.2021
comment
Между прочим... Я не говорю, что это легче всего подобрать. Я просто говорю, что есть возможность работать без локальных общих ветвей, и это также позволит вам не прострелить себе ногу, нажимая в эти ветки невольно/неосознанно.   -  person eftshift0    schedule 10.04.2021
comment
...и это был долгий путь. Вы также можете получить его из своей локальной ветки, если вы создали его из удаленной ветки: git checkout feature; git pull; git push origin feature:master   -  person eftshift0    schedule 10.04.2021