Domanda

Stiamo usando un repository git centrale che ho clonato e sto lavorando su un ramo locale.

Quando voglio fare le mie modifiche disponibili nel repository centrale, devo eseguire i seguenti comandi (a partire dal mybranch):

#Stash local changes not yet ready for checkin
git stash

#Make sure we have all changes from the central repository
git checkout master
git pull

#Rebase local changes
git checkout mybranch
git rebase

#Push changes
git checkout master
git merge mybranch
git push

#Back to my branch and continue work
git checkout mybranch
git stash apply

Mi piacerebbe sapere se è possibile utilizzare un minor numero di comandi git per raggiungere lo stesso obiettivo. Le diverse opzioni tra master e mybranch sono particolarmente fastidiosi, come il nostro repository è piuttosto grande in modo da richiedere un certo tempo.

È stato utile?

Soluzione

Non c'è bisogno di toccare il tuo ramo master locale se non è necessario aggiornarlo e questo sembra essere la causa di un sacco di commutazione ramo inutile.

Si tratta di un flusso di lavoro più minimale.

git fetch

# ensure that everything is committed
# perhaps git commit -a is required...

git rebase origin/master


# If you don't want to push the very latest commits you might
# want to checkout a parent or ancestor of the current commit
# to test that the proposed commit passes tests, etc.
# e.g. git checkout HEAD~n

# push to the remote master
git push origin HEAD:master

# if you checked out a parent, go back to the original branch
git checkout mybranch

Se siete super-sicuri di un genitore commettere, è possibile saltare i passaggi di pagamento e solo fare quanto segue, ma mi piacerebbe vivamente contro di essa. La pubblicazione di commit non testate non è un 'best practice'.

git push origin HEAD^:master

Altri suggerimenti

Non è necessario fare il tiro su entrambi i master e mybranch rami. Dal momento che sei stato una bella cittadina come e facendo gli aggiornamenti fast-forward è piuttosto semplice:

# Save local mods not ready for commit
git stash
# Do the pull & rebase local work assuming this is a remote tracking branch
git pull --rebase
git checkout master
git merge mybranch
git push

Naturalmente, si può anche spingere alla propria filiale mybranch

# Save local mods not ready for commit
git stash
# Do the pull & rebase local work assuming this is a remote tracking branch
git pull --rebase
git push origin mybranch:master

È possibile combinare l'attrazione e rebase in uno:

git pull maestro --rebase

Ma nel complesso, sì, dalla mia esperienza che coinvolge tutti questi comandi.

Per mantenere il repository pulito, il suo utile per eseguire spesso "git gc" che rimuoverà gli oggetti inutilizzati. Questo dovrebbe ridurre il tempo di commutazione ramo.

faccio di solito.

git co master
git pull
git rebase master mywrk # fix conflicts if any
git rebase mywrk master
git push

È possibile definire alias per risparmiare digitazione, se vi piace quel modo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top