2017-09-13 10 views
1

Je suis nouveau à git et je voudrais des éclaircissements sur quelque chose que j'ai fait ces derniers jours en utilisant git mais je ne suis pas sûr que ce soit la bonne façon de le faire.fusionner (git) origine à ma branche de travail locale actuelle

Donc, nous avons origin (dépôt distant) et master (branche locale de ce dépôt)

Voici comment je commence le travail:

  1. git fetch origin // récupère le dernier code de origin (ou remote)
  2. git merge origin/master // fusionne ce code dans le dernier locale master
  3. puis-je créer une nouvelle branche de maître git checkout -b newbranch
  4. maintenant je travaille sur newbranch pendant 2-3 jours et je me rends compte, je me rafraîchir newbranch car d'autres aurait pu ajouter un nouveau code (je crois, terme est appelé « intégration inverse »)

Comment est-ce que je fais cette dernière étape?

Je crois que si je fais git fetch origin/git merge origin/master, cela va rafraîchir (ou inverser l'intégration) master seulement.

Si je fais git fetch origin/git merge origin/newbranch, cela ne fonctionnera pas, je reçois un message comme 'merge: origin/newbranch- not something we can merge'.

Répondre

1

newbranch devrait être branche courante, pour vous assurer que vous pouvez la caisse, alors vous obtenez une version améliorée de vous repo en utilisant fetch puis fusionner newbranch avec le maître

A propos de votre commande: branche, avec laquelle vous travaillez actuellement est déjà en caisse. Pour passer à une autre branche, vous devez l'extraire. Si vous travaillez déjà avec une succursale, vous n'avez pas besoin de payer.

git checkout newbranch 
git fetch 
git merge origin/master 

fusionnent au lieu que vous pouvez utiliser rebasage, dans ce cas, la dernière ligne devrait être remplacé

git rebase origin/master 

Fusion et rebase simplement vous mettez à jour les informations branche avec d'autres branches. Fusionner obtenir des commits de maître et les ajouter à votre branche. Rebase a fait la même chose d'une manière un peu différente. Voir Merging vs. Rebasing. Pour l'instant, oubliez le rebasage, faites fusionner.

+0

pourriez-vous élaborer s'il vous plaît, je suis nouveau à git. Ci-dessus dans mon exemple, j'ai déjà créé newbranch, je ne sais pas pourquoi appeler git checkout ou rebase? – pixel

+0

@pixel, ajouté du texte – Alexan

+0

Pourriez-vous m'expliquer ce que ces 2 lignes font comme si j'avais 2 ans? (caisse, et rebase). Merci – pixel

0
git pull --rebase origin <branch name> 

Il va chercher toutes les validations de cette branche et mettre votre commit dessus.

+0

cela vous dérangerait d'élaborer en utilisant mon exemple ci-dessus s'il vous plaît, je suis nouveau à git? – pixel

+0

'git pull --rebase origine newbranch' où la nouvelle branche a de nouveaux engagements sur les pensions. –

+0

Je n'ai pas fait 'add' ou 'commit' sur newbranch. Est-ce que je dois le faire en premier, avant de fusionner? Est-ce la raison pour laquelle ma fusion ci-dessus échoue? – pixel

1

Je pense que vous devriez faire:

  1. git stash #store vos changements de votre newbranch locale dans une pile

  2. git pull --rebase origin/master #take l'origine dernière modification newbranch locale

  3. git stash pop #pop les modifications à l'étape 1 qui sont stockées dans la pile

  4. En cas de conflit, vous devez résoudre le conflit, puis continuer à travailler jusqu'à ce que vous ayez appuyé sur tous vos changements d'origine.

+0

@Maciej Jureczko, Merci pour votre édition, C'est ma première fois pour répondre à la question dans stackoverflow, et je ne sais pas comment modifier le format. – Maggie

+0

C'est bon, c'est ce que les critiques sont pour :) Assurez-vous de lire les sections d'aide sur demander et répondre si: https://stackoverflow.com/help Bonne chance! :) –

0

Je recommande cette séquence:

git fetch # get all new upstream commits 

# bring master up to date 
git checkout master 
git merge # equivalent to `git merge origin/master` 

# bring newbranch up to date 
git checkout newbranch 
git merge master 

La première fusion va généralement donner lieu à une avance rapide, donc pas de conflit de fusion là. Je déconseille vivement l'utilisation sans esprit de toute solution qui utilise rebase: Ce serait réécrire l'histoire et git does not like lies.

Depuis git pull est le même que git fetch ; git merge, vous pouvez aussi le faire:

# bring master up to date 
git checkout master 
git pull 

# bring newbranch up to date 
git checkout newbranch 
git merge master 

Cela vous évite exactement une ligne de frappe.