Corso
In questo tutorial ti guiderò nell'utilizzo dei comandi Git push e pull e nella creazione di pull request sia con GitHub Desktop sia da riga di comando. Questa guida è pratica per chiunque gestisca repository di codice.
Puoi seguire tutti i materiali di questo tutorial anche se sei alle prime armi. Tuttavia, se sei nuovo a Git, dai un'occhiata al nostro GitHub and Git Tutorial for Beginners e configura l'ambiente con la nostra guida all'installazione di Git.
Cosa sono Git Push e Git Pull?
In sintesi, ecco le differenze:
git push carica i commit locali su un repository remoto come GitHub, mentre git pull scarica le modifiche da un repository remoto e le unisce nel tuo branch locale. Entrambi i comandi possono essere usati da riga di comando o con GitHub Desktop.
Nota: una pull request è una funzionalità di GitHub per proporre e revisionare modifiche prima del merge — non è la stessa cosa di git pull.
Per inviare i commit da un branch locale a un repository remoto, usa:
git push <remote_name> <branch_name>
Un'altra nota: GitHub non supporta più l'autenticazione tramite password. Usa invece chiavi SSH o personal access token.
Push su GitHub
Partiamo dal concetto di push.
Usare la riga di comando per fare push su GitHub
Il modo migliore per imparare è fare pratica, quindi vediamo i passaggi.
1. Creare un nuovo repository
Devi creare un nuovo repository e cliccare sul segno più.
Compila tutti i dettagli richiesti, cioè nome del repository, descrizione e rendi il repository pubblico per questa volta, dato che è gratuito.

2. Apri Git Bash
Puoi scaricare Git Bash qui; è una shell per interagire con il sistema operativo che segue i comandi UNIX.
3. Crea il tuo progetto locale sul desktop puntando alla directory di lavoro corrente
pwd sta per "print working directory" ed è usato per stampare la directory corrente.
Vai al percorso specifico nel tuo computer locale con cd 'path_name'. Il comando cd sta per "change directory" e serve a cambiare directory nel tuo sistema operativo; per individuare il tuo file, 'path_name', ad es. C:/Users/Dell/Downloads/FaceDetect-main, deve essere indicato. Questo comando permette di identificare il file con cui vuoi lavorare.
4. Inizializza il repository Git
Usa git init per inizializzare il repository. Questo crea un nuovo repository vuoto e una directory nascosta .git viene creata nella radice del tuo progetto, raccogliendo tutte le informazioni di revisione in un unico posto.

5. Aggiungi i file al nuovo repository locale
Usa git add . per mettere in stage tutti i file nella directory corrente. Usa git status per vedere quali file sono in stage e pronti per il primo commit.

6. Effettua il commit dei file in stage nel repository locale scrivendo un messaggio di commit
Puoi creare un messaggio di commit con git commit -m 'your message', che registra le modifiche in stage nel repository locale. git commit usa -m come flag per il messaggio per impostare i commit con un contenuto in cui è inclusa la descrizione completa; il messaggio va scritto all'imperativo, fino a 50 caratteri, e deve indicare "cosa è cambiato" e "perché è stato cambiato".

7. Copia l'URL del tuo repository remoto da GitHub
L'HTTPS o l'URL viene copiato dal tuo account GitHub, cioè il percorso del repository remoto.

8. Aggiungi l'URL copiato, cioè il tuo repository remoto, dove verrà pushato il contenuto del tuo repository locale
git remote add origin 'your_url_name'
Nel codice sopra, origin è il nome del remoto e l'URL del remoto è "https://github.com/Olivia-Smithcoder100/FaceDetection.git". In questo caso il remoto è GitHub, che fornisce l'URL da aggiungere al repository remoto.
9. Fai push del codice dal repository locale a GitHub
git push -u origin main viene usato per inviare il contenuto locale a GitHub.
Nel comando, origin è il nome predefinito del repository remoto e il flag -u indica l'upstream, equivalente a -set-upstream. main è il branch. name.upstream è il repository da cui abbiamo clonato il progetto.
Autenticati con le tue credenziali GitHub. Nota che GitHub non supporta più l'autenticazione tramite password per le operazioni Git. Dovrai usare un personal access token (PAT) o una chiave SSH.

10. Visualizza i tuoi file nel repository ospitato su GitHub
Alla fine puoi vedere il file ospitato su GitHub.

Usare GitHub Desktop per fare push su GitHub
GitHub Desktop è disponibile per il download per qualsiasi sistema operativo e offre una piattaforma GUI (Graphical User Interface) per inviare il contenuto locale dal tuo repository locale a un repository remoto come GitHub.
Devi aprire il tuo account GitHub nel browser e il processo di creazione di un nuovo repository, cioè il punto 1, è lo stesso indicato sopra in "Usare la riga di comando per fare PUSH su GitHub".
1. Clicca "Set up in a Desktop"
Devi cliccare sul pulsante mostrato sotto: apparirà un pop-up e dovrai cliccare su "Open GitHub desktop".

2. Clonare in GitHub Desktop
Puoi cliccare il pulsante Clone, come mostrato di seguito.
Dopo aver creato una nuova clone, viene creata una cartella nel tuo computer locale dove è presente anche una directory nascosta .git. 
3. Copia tutti i file necessari dal tuo computer locale nella cartella del clone sul tuo computer
Devi copiare tutti i file necessari, immagini, file README, ecc., nella cartella del clone.

4. Torna a GitHub Desktop e fai commit su main
Puoi vedere che i file aggiunti nella cartella del clone compaiono anche in GitHub Desktop. Infine, scrivi il tuo messaggio e premi Commit to main.

5. Pubblica il branch in GitHub Desktop per caricare tutti i file su GitHub
Puoi cliccare su Publish Branch per pubblicare tutto il contenuto locale su GitHub.

Puoi visualizzare il tuo repository su GitHub dopo aver completato tutti i passaggi.
Git PULL Request
Una pull request è una funzionalità di GitHub che ti permette di avvisare i maintainer del progetto delle modifiche che hai pushato in un repository. Non è la stessa cosa del comando git pull: una pull request è un modo per proporre e revisionare le modifiche prima che vengano unite nel branch principale.
Il comando semplice per effettuare il pull da un branch è:
git pull 'remote_name' 'branch_name'
Il comando git pull combina git fetch, che recupera i commit recenti nel repository locale, e git merge, che unisce il branch remoto a un branch locale. Inoltre, remote_name è il nome del repository e branch_name è il nome del branch specifico.
Vedrai due modi diversi per usare la richiesta di PULL.
PULL Request da riga di comando
Di seguito puoi vedere i file README, che contengono un refuso. Nel file README la parola "contain" è scritta erroneamente come "containnns". Il proprietario di questo repository è MNALO e Olivia è la collaboratrice. Lei risolverà l'errore e invierà una PULL Request. Vedrai il processo per creare una PULL Request tramite un esempio specifico qui sotto.
Nel file sopra, puoi vedere un refuso nella parola "containnns".
1. Forka il repository
Il "Fork" è una copia di un repository. Fare il fork di un repository ti consente di sperimentare liberamente modifiche senza influenzare il progetto originale. (Fonte)

2. Apri la bash sul tuo computer
Devi spostarti nel percorso o nella cartella richiesti usando il comando cd, e puoi visualizzare il contenuto con il comando ls, che elenca tutti i file presenti nella directory; nel nostro caso, puoi vedere che 'README.md' è presente.

3. Crea un nuovo branch
Puoi creare un nuovo branch usando git checkout -b 'branch_name'. Nel comando sopra, il flag -b serve a creare un nuovo branch e branch_name a dargli un nome specifico; con checkout, passi al branch appena creato.

4. Apporta una modifica usando vim dalla bash o sostituendo direttamente dal file README originale
Puoi cambiare la parola "containnns" in "contains" nel file README e visualizzare le modifiche con lo stato corrente usando il comando seguente.
5. Aggiungere e fare commit di un file nel repository
Devi aggiungere e fare commit usando i seguenti comandi.

6. Fai push del repository su GitHub
Devi inviare il contenuto con git push origin 'branch_name'. Nel comando sopra, origin è il repository remoto e 'branch_name' è il branch richiesto dove devi caricare il tuo contenuto locale.

7. PULL request per uno specifico branch su GitHub
Puoi accedere al tuo repository su GitHub e vedere che c'è un nuovo branch.
Ora puoi passare al punto 8, ma serve un aggiornamento del repository locale con l'upstream del repository.
In alternativa, puoi eseguire git pull-request da riga di comando e completare la PULL Request verso GitHub, che ti obbligherà a pushare il branch corrente su un repository remoto.

8. Apri una Pull request
Devi cliccare sul pulsante Create pull request per completare l'azione.

Eliminare un branch dopo il merge della PULL Request
Devi andare alla pagina principale del repository e cliccare su Pull requests.

Devi cliccare su Closed per vedere l'elenco di tutte le PULL Request che hai creato; al momento ce n'è solo una da selezionare. È quella relativa al branch che vuoi eliminare.

Ora puoi cliccare su Delete branch per completare l'azione.

Il proprietario del repository può vedere tutti i commit, le pull request, ecc. creati da collaboratori e altri. Le modifiche apportate da qualcuno possono essere significative, correzioni rapide di bug, errori, ecc., e vengono aggiunte al progetto.

Il proprietario ora clicca su "Merge pull request". Inoltre, farà clic su "Confirm merge" seguendo il processo seguente.


L'ultima modifica apportata al file README.md con il refuso corretto è mostrata sotto.

PULL Request tramite GitHub Desktop
Il file "imp" contiene un refuso: MNALO è il proprietario e Olivia è collaboratrice. Segue il processo seguente per creare una PULL request da GitHub Desktop.
1. Clonare e aprire sul desktop
Un progetto viene clonato e si clicca su "Open in Desktop".

2. Crea un nuovo branch
Viene creato un nuovo branch, "fix-typo-imp".

3. Apporta una modifica al file imp dall'editor di testo
Puoi modificare il contenuto del file imp, correggere un refuso e aggiungere del testo.
4. Effettua il commit delle modifiche
Si scrive un messaggio di commit e si clicca su "Commit to fix-typo-imp".

5. Pubblica il branch
Ora puoi pubblicare il branch, che pusharà il commit su GitHub.

6. Crea una PULL request
Ora puoi creare una PULL request cliccando su Create pull request.
Puoi anche scrivere un messaggio e poi cliccare di nuovo su Create pull request.

Il processo successivo è lo stesso descritto sopra in "PULL Request da riga di comando".
Conclusione
Come prossimo passo, prova il nostro corso GitHub Concepts per continuare a fare pratica con le attività quotidiane. Ti consiglio anche di ottenere la nostra Certificazione GitHub Foundations, sviluppata grazie alla nostra partnership con GitHub. Completarla fa un'ottima figura sul CV, e inoltre c'è un forte sconto sul costo dell'esame quando finisci il corso. Infine, dai un'occhiata a GitHub Actions, sempre più usate nei workflow CI/CD, strettamente legati alle operazioni di push/pull.
FAQs
Che cos'è il comando Git push?
Il comando git push viene usato per caricare contenuti dal tuo repository locale a un repository remoto come GitHub. È essenziale per condividere le tue modifiche con altri o per sincronizzare il tuo sviluppo locale con un repository pubblico o condiviso.
Come faccio una pull request su Git?
Una pull request di Git non è semplicemente un comando diretto di Git, ma una funzione offerta da GitHub per avvisare i maintainer del progetto delle modifiche che hai pushato su un repository su GitHub. La inizi facendo modifiche nel tuo fork del repository, pushando tali modifiche e poi inviando una pull request tramite l'interfaccia web di GitHub.
Qual è la differenza tra git pull e git fetch?
git pull fa due cose: recupera le modifiche da un branch remoto e poi le unisce immediatamente nel tuo branch corrente. git fetch, invece, si limita a recuperare le modifiche dal repository remoto senza fonderle, permettendoti di esaminarle prima di integrarle nel tuo branch.
Posso eliminare un branch dopo aver fatto il merge di una pull request?
Sì, dopo che una pull request è stata unita, puoi tranquillamente eliminare il branch, avendo ormai assolto la sua funzione. Eliminare il branch aiuta a mantenere il repository pulito e gestibile.
Quali sono i prerequisiti per usare GitHub Desktop per le operazioni Git?
Per usare GitHub Desktop, devi scaricare e installare l'applicazione sul tuo sistema, avere un account GitHub e, idealmente, un po' di familiarità con il workflow di GitHub. È un'interfaccia facile da usare che semplifica molti comandi Git in azioni cliccabili.
Come risolvo i conflitti durante una pull request su Git?
I conflitti si verificano quando le modifiche in un branch si sovrappongono a quelle in un altro e non possono essere unite automaticamente. Per risolverli, devi modificare manualmente i file per decidere quale debba essere il contenuto finale, aggiornare le modifiche e poi completare il processo di merge. Strumenti all'interno di GitHub e GitHub Desktop possono aiutarti a identificare e risolvere questi conflitti.
Cosa ha spinto GitHub a cambiare il nome del branch predefinito da master a main?
GitHub ha cambiato il nome del branch predefinito per allinearsi a pratiche di linguaggio inclusivo. Il termine "master" era considerato da alcuni potenzialmente insensibile, e "main" è stato scelto come alternativa neutra e descrittiva.



