Risposte:
Funzionerà quasi.
Quando si spinge in un ramo non predefinito, è necessario specificare il riferimento di origine e il riferimento di destinazione:
git push origin branch1:branch2
O
git push <remote> <branch with new changes>:<branch you are pushing to>
<remote>/<branch>
git push origin :branch2
pensando che avrebbe semplicemente spinto l'attuale ramo locale sul telecomando branch2
, che avrebbe invece eliminato il telecomando branch2
! Il modo corretto è git push origin HEAD:branch2
.
Certamente, sebbene funzionerà solo se è un avanzamento veloce di BRANCH2 o se lo forzate. La sintassi corretta per fare una cosa del genere è
git push <remote> <source branch>:<dest branch>
Vedi la descrizione di un "refspec" nella pagina man di git push per maggiori dettagli su come funziona. Si noti inoltre che sia una spinta forzata che un ripristino sono operazioni che "riscrivono la storia" e non dovrebbero essere tentate dai deboli di cuore a meno che non si sia assolutamente sicuri di sapere cosa si sta facendo rispetto a qualsiasi repository remoto e altro persone che hanno forchette / cloni dello stesso progetto.
git push --force remote local-branch:remote-branch
.
È molto semplice. Supponiamo di aver apportato modifiche al tuo Branch A che risiede sia localmente che da remoto, ma che desideri inviare queste modifiche al Branch B che non esiste da nessuna parte.
Step-01: crea e passa al nuovo ramo B
git checkout -b B
Step-02: aggiungi le modifiche nel nuovo ramo locale
git add. // o file specifici
Step-03: conferma le modifiche
git commit -m "commit_message"
Step-04: spingere le modifiche al nuovo ramo B . Il comando seguente creerà un nuovo ramo B anche in remoto
git push origine B
Ora, è possibile verificare dalla bitbucket che il ramo B avrà un altro commit di ramo A . E quando si checkout il ramo A questi cambiamenti non saranno lì in quanto questi sono stati spinti nel ramo B .
Nota: se hai apportato le modifiche al ramo A e successivamente desideri spostare tali modifiche nel nuovo ramo B, dovrai prima ripristinare quelle modifiche. #HappyLearning
Nel mio caso ho avuto un commit locale, che non è stato spinto a origin\master
, ma impegnato nella mia master
filiale locale . Questo commit locale dovrebbe ora essere spinto in un altro ramo.
Con Git Extensions puoi fare qualcosa del genere:
Puoi farlo anche dalla riga di comando GIT . Esempio copiato da David Christensen :
Penso che troverai
git cherry-pick
+git reset
un flusso di lavoro molto più veloce:Utilizzando il tuo stesso scenario, con "feature" che è il ramo con il commit più in alto che è errato, sarebbe molto più facile farlo:
git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^
Risparmia parecchio lavoro ed è lo scenario che è
git cherry-pick
stato progettato per gestire.Noterò anche che funzionerà anche se non è il massimo impegno; hai solo bisogno di un commit per l'argomento da scegliere, tramite:
git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # whack the specific commit from the history
Ho ottenuto un brutto risultato con il git push origin branch1:branch2
comando:
Nel mio caso, branch2
viene eliminato ed branch1
è stato aggiornato con alcune nuove modifiche.
Pertanto, se si desidera che solo le modifiche vengano attivate branch2
dal branch1
, provare le procedure seguenti:
branch1
:git add .
branch1
:git commit -m 'comments'
Su branch1
:git push origin branch1
Su branch2
:git pull origin branch1
On branch1
: ripristina il commit precedente.
puoi farlo facilmente
git status
git add .
git commit -m "any commit"
git pull origin (branch name, master in my case)
git push origin current branch(master):branch 2(development)(in which you want to push changes)
git init
#git remote remove origin
git remote add origin <http://...git>
echo "This is for demo" >> README.md
git add README.md
git commit -m "Initail Commit"
git checkout -b branch1
git branch --list
****add files***
git add -A
git status
git commit -m "Initial - branch1"
git push --set-upstream origin branch1
#git push origin --delete branch1
#git branch --unset-upstream
Ti sei impegnato con BRANCH1 e vuoi sbarazzarti di questo commit senza perdere le modifiche? git reset è quello che ti serve. Fare:
git branch BRANCH2
se vuoi che BRANCH2 sia un nuovo ramo. Puoi anche unire questo alla fine con un altro ramo se vuoi. Se BRANCH2 esiste già, lasciare questo passaggio.
Quindi fa:
git reset --hard HEAD~3
se si desidera reimpostare il commit sul ramo in cui è stato eseguito il commit. Questo prende le modifiche degli ultimi tre commit.
Quindi, procedi come segue per portare i commit reimpostati su BRANCH2
git checkout BRANCH2
Questa fonte è stata utile: https://git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch
branch1
ebranch2
devono essere sul telecomando? Cosa succede se si desidera passare dal localebranch1
al telecomandoorigin branch2
?