Maison  >  Questions et réponses  >  le corps du texte

git - Pourquoi s'engager d'abord, puis tirer et enfin pousser? Au lieu de s’engager puis de pousser directement ?

Je ne comprends vraiment pas, et il n’y a pas d’explication claire à ce sujet sur Internet.
La situation est la suivante. Il y a maintenant un entrepôt distant et une seule succursale, qui est principale. Ensuite, mon entrepôt local est cloné à partir du maître distant. Tout le monde le clone, puis le modifie localement, le valide, puis le tire puis le pousse. C'est ce que tout le monde fait. Alors maintenant vient la question :

1. Alors mon local peut être considéré comme une succursale ? Ou est-ce juste un entrepôt local ?

2. Si je crée une nouvelle branche à distance et que je la retire, ai-je une branche localement ? Ma succursale locale est-elle la même que la succursale distante nouvellement créée ?

3. Quelle est la différence entre un entrepôt local et une succursale locale ?

4. Le commit est soumis à l'entrepôt local puis poussé. Ce push envoie-t-il tout le code vers l'entrepôt distant, ou simplement pousse-t-il le commit vers l'entrepôt distant ?

5. Alors pourquoi devez-vous d'abord valider, puis tirer, puis pousser ? Si je tire, n'ai-je pas écrasé tout le code que j'ai modifié, car je n'ai modifié aucun code à distance, donc si je tire, est-ce que je le fais ? cela ne veut-il pas dire que j'ai été écrasé ? Y a-t-il de bons changements locaux ? Alors, comment puis-je pousser ?

6. Deux branches, A et B. A fusionne avec B et B fusionne avec A. Y a-t-il une différence ?

怪我咯怪我咯2674 Il y a quelques jours3485

répondre à tous(3)je répondrai

  • 滿天的星座

    滿天的星座2017-05-25 15:10:32

    INSIGHT

    1. La zone locale est considérée comme un clone.

    2. Oui, s'il y a une branche de développement distante, alors extrayez origin dev, il y aura une branche de développement localement.

    3. L'entrepôt est l'ensemble du projet, et la succursale est l'une des lignes de production. Tout comme le groupe Alibaba n'a pas qu'un seul Taobao

    4.push l'analysera, bien sûr pas en totalité. Vous pouvez le tester vous-même et obtenir des fichiers volumineux. La poussée d'un nouveau projet pour la première fois sera très lente. plusieurs kilo-octets, le transfert sera très lent Dépêchez-vous

    .

    5. Commit empêche la télécommande d'écraser directement votre local. Tant qu'il y a des modifications, il vous sera demandé de valider. La raison pour laquelle vous êtes invité à extraire est que les dernières éléments de votre télécommande sont incohérents avec votre local. . Git sait que les éléments des branches distantes ne peuvent pas être supprimés, il vous est donc demandé de les extraire et de les enregistrer localement, afin que celui local devienne le plus récent et enfin de le remonter de la même manière, si votre local l'est. au dernier, il modifiera celui distant.

    Réponse terminée, maman

    répondre
    0
  • ringa_lee

    ringa_lee2017-05-25 15:10:32

    1. Tout d'abord, pull n'écrasera pas votre code local, mais vous rappellera les conflits de fusion, et vous devrez fusionner manuellement ; pull不会把你本地代码覆盖掉,而是提醒merge冲突,需要你手动merge一下;

    2. 为什么要pull?因为对你来说你本地可能有个分支,你在这个分支上面工作,那么也有可能存在其他人和你一样的做法,也许你们的代码有依赖又或是有冲突,你肯定不能在master里面测试,你要确保自己分支是最新代码;

    3. 本地分支代码不一定和本地仓库是一致的,你把本地代码提交了才会存到本地仓库中,就相当于本地分支是你开发的一个平台,但是最后开发的产出存放地址是本地仓库

    两种都可以,只不过大部分人选择先pull,因为你没提交你的代码,别人提交了,这时候git会自动merge,而如果你提交了,有时候git自动merge会报冲突,选择先pull就是图一个方便和省事,当然也有人选择先pushpull,这样可以了解其他伙伴对代码的改动

    通俗的说就比如原来master的代码快照是1,你的同伴改了提交了是2,你的提交代码是3,如果你先pull,那么就是3和1merge,而3包含1,git选择最新代码3覆盖1,不存在冲突关系,而你先pushpull,那就是2和3merge,这是git自动merge

  • Pourquoi pull ? Parce que pour vous, vous pouvez avoir une branche locale et que vous travaillez sur cette branche, alors il se peut que d'autres personnes fassent la même chose que vous. Peut-être que votre code a des dépendances ou des conflits, et vous ne pouvez certainement pas le faire dans Lors des tests en master, vous devez vous assurer que votre branche dispose du dernier code ;
    Le code de la succursale locale n'est pas nécessairement cohérent avec l'entrepôt local. Vous soumettez le code local avant qu'il ne soit enregistré dans l'entrepôt local. Cela équivaut à ce que la succursale locale soit une plateforme pour votre développement, mais l'adresse de stockage finale du. la production développée est un entrepôt local

    Les deux sont possibles, mais la plupart des gens choisissent de extraire en premier, car vous n'avez pas soumis votre code et que quelqu'un d'autre l'a soumis. À ce moment-là, git automatiquement. >merge , et si vous soumettez, parfois git automatiquement merge signalera les conflits. Choisir de pull en premier est pratique et évite les problèmes. . , bien sûr, certaines personnes choisissent de push d'abord puis de pull, afin de pouvoir comprendre les modifications de code apportées par d'autres partenaires

    🎜En termes simples, par exemple, l'instantané de code d'origine de master est 1, votre partenaire a modifié l'instantané de code et l'a soumis à 2, et votre code soumis est 3. Si vous tirez< /code> d'abord, puis c'est 3 et 1merge, et 3 contient 1. git sélectionne le dernier code 3 pour écraser 1. Il n'y a pas de relation de conflit et vous push d'abord Dans pull, c'est-à-dire 2 et 3merge, ce qui est une erreur pour git de automatiquement >fusionner car il ne sait pas ce qui est nécessaire et ce qui ne l'est pas🎜 🎜🎜Problème de fusion🎜🎜La fusion de a et b est la même que la fusion de b et a. Le code requis par les deux branches est conservé et intégré dans un code sur lequel tout le monde est d'accord🎜. 🎜La seule différence est que le processus de fusion peut être un peu différent selon la situation, mais c'est fondamentalement le même🎜.

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-25 15:10:32

    1. La relation entre local et distant est équivalente à deux branches. Vous ressentez la même chose car la relation correspondante a été automatiquement liée lorsque vous git pull, configurez en amont..balbalagit pull 的时候已经自动给绑定好对应关系了, set-upstream..balbala

    2. 你远程新建了一个分支拉到本地的道理是一样的,属于复制了一份,但是本地分支和远程分支已经是两个东西了

    3. 本地分支属于本地仓库里,是包含关系,一个仓库里可以有很多分支, 如果是 tag 的话可以分离出独立的仓库

    4. 肯定不会全量推送到远程的,是通过对比 commit 的记录,如果本地高于远程就直接把多出来的commit 给怼上去,如果本地的这几个 commit 和远程的 commit 有冲突的部分就merge,然后根据提交时间排序再新建一个merge 的 commit 记录再怼上去

    5. 这个先 commit 再 pull 再 push 的情况就是为了应对多人合并开发的情况,

      1. commit 是为了告诉 git 我这次提交改了哪些东西,不然你只是改了但是 git 不知道你改了,也就无从判断比较;

      2. pull是为了本地 commit 和远程commit 的对比记录,git 是按照文件的行数操作进行对比的,如果同时操作了某文件的同一行那么就会产生冲突,git 也会把这个冲突给标记出来,这个时候就需要先把和你冲突的那个人拉过来问问保留谁的代码,然后在 git add && git commit && git pull 这三连,再次 pull 一次是为了防止再你们协商的时候另一个人给又提交了一版东西,如果真发生了那流程重复一遍,通常没有冲突的时候就直接给你合并了,不会把你的代码给覆盖掉

      3. 出现代码覆盖或者丢失的情况:比如A B两人的代码pull 时候的版本都是1,A在本地提交了2,3并且推送到远程了,B 进行修改的时候没有commit 操作,他先自己写了东西,然后 git pull 这个时候 B 本地版本已经到3了,B 在本地版本3的时候改了 A 写过的代码,再进行了git commit && git push

        .
      La raison pour laquelle vous créez une nouvelle branche à distance et la tirez localement est la même. Il s'agit d'une copie, mais la branche locale et la branche distante sont deux choses différentes
    . 🎜🎜La succursale locale appartient à l'entrepôt local et constitue une relation d'inclusion. Il peut y avoir plusieurs succursales dans un entrepôt, s'il s'agit d'une étiquette, elle peut être séparée en un entrepôt indépendant🎜🎜. 🎜🎜Il ne sera certainement pas poussé dans son intégralité vers la télécommande. Il est comparé aux enregistrements de validation. Si le local est supérieur à la télécommande, le commit supplémentaire sera directement poussé vers le haut. La partie conflictuelle entre le commit et le commit distant est merge, puis créez un enregistrement de commit de fusion en fonction de l'heure de soumission, puis téléchargez-le🎜 🎜 🎜 🎜Cette situation consistant à s'engager d'abord, puis à tirer et enfin à pousser consiste à faire face à la situation de plusieurs personnes fusionnant le développement,🎜 🎜 🎜🎜commit consiste à dire à git ce que j'ai modifié dans cette soumission, sinon vous venez de le modifier mais git ne sait pas que vous l'avez modifié, il n'y a donc aucun moyen de juger et de comparer ;🎜🎜 🎜🎜pull est destiné à l'enregistrement de comparaison du commit local et du commit distant, Git compare en fonction du nombre de lignes du fichier. Si la même ligne d'un fichier est utilisée en même temps, un conflit. se produira. Git également Ce conflit sera marqué. À ce stade, vous devez d'abord arrêter la personne en conflit avec vous et lui demander quel code doit être conservé, puis dans les trois étapes consécutives de git add && git. commit && git pull, Le but de tirer à nouveau est d'empêcher une autre personne de soumettre une autre version des choses pendant que vous négociez. Si cela se produit, le processus sera répété. Habituellement, lorsqu'il n'y a pas de conflit, ce sera le cas. sera fusionné directement pour vous, et votre code ne vous sera pas donné Couvrez-le 🎜🎜. 🎜🎜Une couverture ou une perte de code se produit : par exemple, les versions des codes de A et B lors de l'extraction sont toutes deux 1, A a soumis 2 et 3 localement et les a poussés vers la télécommande, et B ne s'est pas commis, il a d'abord écrit quelque chose par lui-même, puis git pull À ce moment-là, la version locale de B a atteint 3. B a modifié le code écrit par A alors que la version locale était 3, puis git commit && git push Ensuite, dans la version distante, c'est 4, et le code de A est écrasé, donc tout le monde doit d'abord valider puis tirer, sinon le code sera vraiment écrasé🎜🎜 🎜 🎜 🎜

    répondre
    0
  • Annulerrépondre