di Let chiarire un paio di piccoli dettagli: primi
- Un ramo è un "ref" sotto la
refs/heads
namespace. Solo ls .git/refs/heads
e cat
i file lì per vedere cosa intendo.
- Un tag è "ref" sotto lo spazio dei nomi
refs/tags
. Solo ls .git/refs/tags
per vedere di persona.
HEAD
solo un altro "ref", ma è speciale nell'aspetto che può essere "simbolico". Solo cat .git/HEAD
e guarda cosa dice.
Un'operazione push
opera su un "ref" e il "mapping" predefinito mantiene lo spazio dei nomi. Ciò significa che quando spingo un ramo, apparirà come un ramo sul telecomando; quando spingo un tag, verrà visualizzato come tag sul telecomando. Prendere in considerazione i seguenti scenari:
voglio spingere il tag moo
e farla apparire come un ramo sul server remoto (sì, sto essenzialmente "convertire" un tag in un ramo). Questo è il modo lo farò:
git push origin moo:refs/heads/moo
Git ha bisogno di un modo per distinguere tra fast-forward e non ff spinge, in modo che la gente non finiscono per sovrascrivere il lavoro di altre persone per errore. Diciamo che voglio spingere i rami master
, next
e pu
, di cui solo pu
non-ff. Questo è come io lo farò (si noti che è necessario fornire un mapping esplicito quando si utilizza +
):
git push origin master next +pu:pu
Ora, veniamo alla tua domanda. Volete spingere il vostro HEAD
in modo che compaia nello spazio dei nomi refs/heads
sul telecomando come un ramo chiamato "ignore-netbeans-config". Se questo ramo non esisteva prima o se stai sovrascrivendo alcuni commit in esso (cioè non-ff push), usa +
. Altrimenti, non farlo. Risultato finale:
git push origin +HEAD:refs/heads/ignore-netbeans-config
TL; DR versione: git push origin +HEAD:refs/heads/ignore-netbeans-config
Bella domanda! Ovviamente, se puoi apportare ulteriori modifiche qui, vorresti andare avanti e creare una filiale per essere al sicuro. – Cascabel