Vai al contenuto
GitTree

Lezione 12 · Lavoro quotidiano

Tira con l'avanzamento veloce, unisci o rebase

Scegliere una politica pull esplicita dopo aver esaminato la divergenza. Confronta il rifiuto di solo avanzamento rapido, l'unione e il rebase privato utilizzando tre copie e un server locale isolato.

Avanzamenti salvati in questo browser.

La riproduzione carica il video da YouTube (modalità ottimizzata per la privacy).

Narrazione in inglese · English and Arabic didascalie

Apri la pagina del videoGuarda su YouTube

Cosa imparerai

  • Recupero separato dall'integrazione pull.
  • Confronta tre scelte politiche esplicite.
  • Riconoscere il rifiuto ff-only come risultato della politica.
  • Esamina le impostazioni dei criteri delle app upstream e persistenti.

Prima di iniziare

Iniziare dal progetto del corso così come lo aveva lasciato la lezione 11, con il main portato al commit recuperato da Leo; chiama quel commit M. Hai quindi tre copie ordinarie di una divergenza: un argomento privato con un commit S e un ramo del server aggiornato-principale con un diverso commit N, entrambi su M. L'argomento privato è attuale e pulito. Ciascuno punta l'origine solo a un nuovo server nudo contenente aggiornato-main/N e tiene traccia di origin/updated-main; i vecchi prezzi pubblicati/il telecomando principale non sono stati modificati.

Il video è stato registrato con Git 2.52.0 e GitTree 2.0 il Ubuntu 24.04: nel terminale sono stati costruiti la divergenza, il ramo di salvataggio e il nuovo server; i tre pull, le visualizzazioni dei risultati, il file dei criteri e il ripristino in modalità Pull sono stati eseguiti nell'app; i risultati sono stati controllati nel terminale. Non è stato eseguito nulla su macOS o Windows e Ubuntu è l'unico sistema Linux registrato. Il Git floor di origine di GitTree è 2.39.0.

GitTree ti chiede di accedere; il piano gratuito copre quindi ogni passaggio qui. Non è necessario alcun account fornitore, Pro/prova, credenziale API o servizio Internet. Un'origine nuda locale non è GitLab o CI. Tutte le identità utilizzano example.com; non eseguire mai questa lezione all'interno di un checkout di origine.

Effettua mutazioni tramite GitTree o il percorso nativo su input identici, non entrambi consecutivamente. È possibile seguire anche la verifica di sola lettura. Qualsiasi preparazione descritta come lavoro terminale è etichettata come preparazione nativa, mai come funzionalità inventata dell'app.

Effetti del concetto e dello stato

Il pull viene recuperato seguito dalla policy di integrazione selezionata; non è sinonimo di aggiornamento. Una fase di recupero può aggiornare i riferimenti di tracciamento anche quando ff-only successivamente rifiuta di spostare il ramo locale.

Su S/N privato divergente, ff-only rifiuta, l'unione preserva entrambi i percorsi e rebase riproduce il commit privato sulla base recuperata. Non cambiare modalità silenziosamente per far sparire un rifiuto.

I comandi della modalità Pull della palette aggiornano general.pullMode, una preferenza a livello di app, non un flag Git one-shot. Registra/ripristina l'impostazione precedente nell'app di registrazione. I flag pull espliciti nativi riportati di seguito non modificano l'impostazione dell'app.

Ogni pull recupera la sua origine sandbox. Solo FF lascia argomento/indice/opera in S; unisci e aggiorna solo il proprio argomento e i propri file. Nessun ramo del server viene inviato. La scelta del criterio della tavolozza modifica anche la preferenza a livello di app fino al ripristino.

Preparare lo stato esatto del progetto

Iniziare da una copia ordinaria separata del progetto del corso pulito così come lo ha lasciato la lezione 11. Le funzionalità originali di Gittree rimangono preservate; non eseguire questo scenario nell'originale o nel checkout di origine. (Un piano precedente del corso ha iniziato questa lezione dal risultato di una successiva lezione di unione; quella lezione non è ancora registrata, quindi il video utilizza il progetto della lezione 11 e gli stessi passaggi.) Quindi esegui la preparazione esatta di seguito. La firma demo locale del repository è disattivata e GitTree Demo <demo@example.com> è l'identità a meno che un compagno di squadra non venga nominato esplicitamente.

Completare gli input del file

Risparmia solo nella fase denominata di seguito. Questi sono corpi UTF-8/LF completi con un ritorno a capo finale; non incollare mai le recinzioni Markdown. I file eseguibili non modificati ereditano l'input denominato. Le versioni in varianti separate non devono sovrascrivere l'originale.

index.html — ISCRIVITI

Estratto del file · html
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main" tabindex="-1">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">See your work clearly.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
    <section aria-labelledby="plans-title">
      <h2 id="plans-title">Choose the workflow you need</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>Local Git</h3>
          <p>Local Git workflows work without signing in.</p>
        </article>
        <article class="feature-card">
          <h3>Connected workflows</h3>
          <p>Provider integrations and Nour require Pro or an applicable trial.</p>
        </article>
      </div>
    </section>
    <section aria-labelledby="signup-title">
      <h2 id="signup-title">Try the demo form</h2>
      <form id="signup-form" novalidate>
        <label for="demo-email">Demo email</label>
        <input id="demo-email" name="email" type="email" autocomplete="off" aria-describedby="signup-hint">
        <p id="signup-hint">Use a fictional example.com address. Nothing is sent.</p>
        <button type="submit">Check the address locally</button>
        <p id="signup-result" role="status"></p>
      </form>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

docs/integration-note.md — DOC_MERGE

Uscita
# Integration review

This note was written on main while signup work was private.

docs/pull-policy.md — DOC_PULL

Uscita
# Pull policy

Fetch first and inspect ancestry.
Use fast-forward only when no integration decision is needed.
Merge preserves existing commit identities; rebase recreates private commits.
Never rewrite someone else's published work without coordination.

Tra GitTree

Tavolozza: Comando+Maiusc+P (Ctrl+Maiusc+P su Ubuntu); digitare il comando con il nome esatto e selezionarlo. Le azioni di riferimento con nome utilizzano il menu contestuale di quella riga, non una scorciatoia della tavolozza senza argomenti.

  1. Preparare le tre copie isolate effettive e il proprio server/upstream di seguito; registrare il general.pullMode precedente prima di scegliere una policy.
  2. Nella copia FF, la palette Seleziona: Solo avanzamento veloce, quindi il pulsante Pull della barra degli strumenti; attendere il vero rifiuto della divergenza. L'avviso dell'app recita "funzionalità/modulo di iscrizione non possono avanzare rapidamente", afferma che entrambe le parti si sono impegnate, l'altra no, che non è stato modificato nulla e offre Resolve… da unire, riprogrammare o reimpostare. Rimane finché non lo elimini, quindi eliminalo prima della copia successiva.
  3. Controlla il suggerimento/lavoro dell'argomento invariato anche se l'origine recuperata/principale aggiornata è corrente; non premere la spinta forzata….
  4. Nella copia Unisci non modificata, scegli Tira: Avanti veloce se possibile, Altrimenti Unisci, quindi il pulsante Tira della barra degli strumenti; controllare il risultato effettivo del doppio genitore.
  5. Nella copia Rebase intatta, scegli Pull: Rebase, quindi Pull; l'argomento corrente è privato, non è necessario l'autostash.
  6. Verifica ricreato S′ su N, unisci i genitori e uguali alberi completi. Conserva ogni risultato in modo indipendente.
  7. Salvare l'intero DOC_PULL come docs/pull-policy.md in una copia di pratica solo dopo aver conservato gli snapshot confrontati; lascialo non impegnato qui.
  8. Ripristina esplicitamente la modalità Pull precedente dell'app di registrazione; verificare che non si sia verificata alcuna spinta automatica o modifica dell'originale principale.

Per ogni commit ordinario: Summary è l'oggetto indicato; Descrizione vuota; Modifica commit precedente, Salta hook, Aggiungi autore firmato, Autore diverso, Push dopo commit e Consenti commit vuoto disattivato; nessun coautore. Metti in stage solo i file nominati, quindi applica le modifiche a N file una volta (File per uno) o Comando+Invio come alternativa. Aspetta il risultato reale. Una lezione che modifica esplicitamente cambia solo l'opzione dichiarata.

Nel terminale

In una copia separata e pulita del progetto, porta prima main al commit recuperato da Leo (ovvero M), quindi crea l'argomento privato:

Command · bash
git merge --ff-only --quiet origin/main
git switch --create feature/signup-form

Inserisci il file SIGNUP salvato su index.html (il video ha salvato i file della lezione in ~/Downloads e utilizza cp ~/Downloads/SIGNUP.html index.html), quindi:

Command · bash
git add -- index.html
git commit --quiet -m "feat: add the local signup demonstration"
git branch rescue/signup-before-rebase
BASE_SHA="$(git rev-parse HEAD~1)"
git switch --quiet --create updated-main "$BASE_SHA"

Nella sezione principale aggiornata inserisci DOC_MERGE in docs/integration-note.md (cp ~/Downloads/DOC_MERGE.md docs/integration-note.md), quindi:

Command · bash
git add -- docs/integration-note.md
git commit --quiet -m "docs: add the integration review"
git switch --quiet feature/signup-form

BASE_SHA è il genitore M misurato prima del commit dell'iscrizione privata. Sia il topic che il main aggiornato ora hanno un commit indipendente; Rescue/Signup-Before-Rebase mantiene il vecchio argomento. Non viene pubblicato nulla di questo argomento.

Da quella copia pre-rebase, prepara un server new contenente solo N:

Command · bash
git clone --quiet --bare --single-branch --branch updated-main --no-local . ../gittree-pull-origin.git

Crea tre copie ordinarie dello stesso input con cp -R <source-demo-copy> <new-copy> mentre nessuna operazione Git/app è attiva, o copie equivalenti verificate del filesystem preservando .git. In ogni copia sostituisci origin con l'URL del file misurato per quel nuovo server, recupera e imposta l'argomento upstream; non reindirizzare mai l'originale:

Command · bash
git remote set-url origin "<measured-file-url>"
git fetch --quiet --prune origin
git branch --set-upstream-to=origin/updated-main feature/signup-form

Utilizza l'URL del file misurato al posto del segnaposto. Nella copia FF:

Command · bash
git pull --quiet --ff-only origin updated-main

Uscita misurata 128; estratto diagnostico:

Uscita
hint: Diverging branches can't be fast-forwarded, you need to either:
hint:
hint: 	git merge --no-ff
hint:
hint: or:
hint:
hint: 	git rebase
hint:
hint: Disable this message with "git config set advice.diverging false"
fatal: Not possible to fast-forward, aborting.

In una copia di unione separata:

Command · bash
git pull --quiet --no-rebase --no-edit origin updated-main

Nella copia Rebase separata:

Command · bash
git pull --quiet --rebase origin updated-main

Entrambi ci sono riusciti; gli ID effettivi dell'albero finale corrispondevano, l'unione aveva due genitori e ne veniva riprodotto uno. Per ogni ispezione:

Command · bash
git rev-list --parents -n 1 HEAD
git rev-parse 'HEAD^{tree}'
git status --short

Gli SHA variano; gli stati erano puliti prima della pratica opzionale del file di policy. Nessun comando spinge un ramo.

Risultato

Where you end: La copia solo FF rimane in S con rifiuto dopo il recupero. La copia di unione aggiunge un'integrazione a due genitori; la copia rebase crea S′ su N. Gli alberi unisci/rebase concordano; nessuna spinta. Conserva il file dei criteri come pratica non vincolabile solo dopo i confronti.

Errori comuni

  • Supponendo che un grafico lineare significhi che il vecchio ID di commit è sopravvissuto.
  • Trattare il riquadro alternativo come il checkpoint originale.
  • Ripetere una mutazione completata dopo il successo dell'app.

Se qualcosa va storto

Il rifiuto del FF non costituisce perdita di dati. Esamina i riferimenti recuperati/locali e scegli una policy rivista per quella copia. Se l'unione/rebase si interrompe, risolvi/continua o interrompi esplicitamente; non eseguire un altro pull su un'operazione attiva.

Controlla la tua comprensione

Rispondi a ciascuna domanda, quindi leggi il motivo. Le domande contrassegnate come "Obbligatorio" contano ai fini del completamento della lezione.

  1. Domanda 1 di 6

    Cos'è la trazione qui?

    Scegli una risposta.

  2. Domanda 2 di 6

    Cosa può succedere in caso di rifiuto ff-only?

    Scegli ogni risposta applicabile.

  3. Domanda 3 di 6
    Obbligatorio

    Replay privato su N: genitore risultante?

    Scegli una risposta.

  4. Domanda 4 di 6
    Obbligatorio

    Cambia il lavoro corrente in un argomento condiviso pubblicato: il rebase è ancora un consiglio automatico?

    Scegli una risposta.

  5. Domanda 5 di 6

    Il comando dei criteri della tavolozza cambia solo un pull?

    Scegli una risposta.

  6. Domanda 6 di 6
    Obbligatorio

    Cosa dimostra il confronto?

    Scegli ogni risposta applicabile.

0 di 6 corretto

Rispondi correttamente alle domande richieste per completare la lezione.

Controllato in questo browser.

Pratica

Spiegare quale stato è cambiato nella copia rifiutata, confrontare i due alberi e genitori riusciti, quindi scrivere la politica DOC_PULL completa. Verifica che le preferenze dell'app di registrazione siano state ripristinate.

La tua conferma: il sito non può vedere il tuo computer.

Per completare la lezione rispondere correttamente alle domande richieste e confermare l'esercizio pratico.

Riepilogo

  • Pull include una politica di integrazione.
  • Il rifiuto può seguire a un recupero riuscito.
  • La persistenza della politica necessita di una revisione esplicita.

Termini del glossario introdotti

Rebase — إعادة تأسيس; ripetere: إعادة تطبيق; rif. salvataggio — مرجع حفظ.

Trascrizione video

La narrazione del video, spunto per spunto.

Mostra la trascrizione
  1. Inizia dal checkpoint esatto.
  2. Assegna un nome al ramo, indice e versione funzionante.
  3. Preparare solo la copia isolata del corso.
  4. Assegna un nome a monte e preservare tutti e tre gli input.
  5. L'avanzamento veloce rifiuta solo questa divergenza.
  6. Un rifiuto può seguire a un recupero riuscito.
  7. La politica di unione preserva entrambe le storie.
  8. Riproduci solo l'argomento privato.
  9. Confronta genitori e completare gli alberi separatamente.
  10. Successivamente scrivere la policy pull rivista.
  11. Ripristina il precedente criterio a livello di app.
  12. Cos'è la trazione qui?
  13. Pull ha una fase di trasporto e fase locale governata dalle politiche.
  14. Cosa può succedere in caso di rifiuto ff-only?
  15. Il recupero può terminare prima l’integrazione rifiuta la divergenza.
  16. Replay privato su N: genitore risultante?
  17. Rebase crea S′ su N, a differenza dell'unione K.
  18. Cambia il lavoro corrente in condiviso pubblicato argomento: rebase ancora avviso automatico?
  19. Le ipotesi esclusivamente private non valgono più.
  20. Comando criterio tavolozza cambia solo un tiro?
  21. La fonte scrive general.pullMode finché un'altra scelta non lo ripristina.
  22. Cosa dimostra il confronto?
  23. Confronta piuttosto lo stato attuale piuttosto che comandare il silenzio.
  24. Verificare il risultato reale, non solo un messaggio.
  25. Prevedere l'input modificato prima di agire.
  26. Conservare il lavoro utile prima del ripristino.
  27. Dimostrare il checkpoint prima di continuare.
  28. Conserva il risultato verificato per il passo successivo.