Git Branch Merge
Unisci rami
Abbiamo la correzione di emergenza pronta, quindi uniamo i rami master e correzione di emergenza.
Innanzitutto, dobbiamo passare al ramo principale:
Esempio
git checkout master
Switched to branch 'master'
Ora uniamo il ramo corrente (master) con la correzione di emergenza:
Esempio
git merge emergency-fix
Updating 09f4acd..dfa79db
Fast-forward
index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Dal momento che il ramo di correzione di emergenza è arrivato direttamente da master e non sono state apportate altre modifiche a master mentre stavamo lavorando, Git lo vede come una continuazione di master. Quindi può "avanti veloce", semplicemente puntando sia il master che la correzione di emergenza allo stesso commit.
Poiché il master e la correzione di emergenza ora sono essenzialmente gli stessi, possiamo eliminare la correzione di emergenza, poiché non è più necessaria:
Esempio
git branch -d emergency-fix
Deleted branch emergency-fix (was dfa79db).
Unisci conflitto
Ora possiamo passare alle immagini di ciao-mondo e continuare a lavorare. Aggiungi un altro file immagine (img_hello_git.jpg) e cambia index.html, in modo che lo mostri:
Esempio
git checkout hello-world-images
Switched to branch 'hello-world-images'
Esempio
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World
from Space" style="width:100%;max-width:960px"></div>
<p>This is the first
file in my new Git Repo.</p>
<p>A new line in our file!</p>
<div><img
src="img_hello_git.jpg" alt="Hello Git"
style="width:100%;max-width:640px"></div>
</body>
</html>
Ora, abbiamo finito con il nostro lavoro qui e possiamo mettere in scena e impegnarci per questo ramo:
Esempio
git add --all
git commit -m "added new image"
[hello-world-images 1f1584e] added new image
2 files changed, 1 insertion(+)
create mode 100644 img_hello_git.jpg
Vediamo che index.html è stato modificato in entrambi i rami. Ora siamo pronti per unire le immagini di ciao-mondo in master. Ma cosa accadrà alle modifiche che abbiamo fatto di recente in master?
Esempio
git checkout master
git merge hello-world-images
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
L'unione non è riuscita, poiché esiste un conflitto tra le versioni per index.html. Controlliamo lo stato:
Esempio
git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Changes to be committed:
new file: img_hello_git.jpg
new file: img_hello_world.jpg
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: index.html
Ciò conferma che c'è un conflitto in index.html, ma i file di immagine sono pronti e messi in scena per essere salvati.
Quindi dobbiamo risolvere quel conflitto. Apri il file nel nostro editor:
Esempio
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link
rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello
world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from
Space" style="width:100%;max-width:960px"></div>
<p>This is the first file
in my new Git Repo.</p>
<<<<<<< HEAD
<p>This line is here to show how
merging works.</p>
=======
<p>A new line in our file!</p>
<div><img
src="img_hello_git.jpg" alt="Hello Git"
style="width:100%;max-width:640px"></div>
>>>>>>> hello-world-images
</body>
</html>
Possiamo vedere le differenze tra le versioni e modificarle come vogliamo:
Esempio
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link
rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello
world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from
Space" style="width:100%;max-width:960px"></div>
<p>This is the first file
in my new Git Repo.</p>
<p>This line is here to show how
merging works.</p>
<div><img
src="img_hello_git.jpg" alt="Hello Git"
style="width:100%;max-width:640px"></div>
</body>
</html>
Ora possiamo mettere in scena index.html e controllare lo stato:
Esempio
git add index.html
git status
On branch master
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
Changes to be committed:
new file: img_hello_git.jpg
new file: img_hello_world.jpg
modified: index.html
Il conflitto è stato risolto e possiamo usare commit per concludere l'unione:
Esempio
git commit -m "merged with hello-world-images after fixing conflicts"
[master e0b6038] merged with hello-world-images after fixing conflicts
Ed elimina il ramo hello-world-images:
Esempio
git branch -d hello-world-images
Deleted branch hello-world-images (was 1f1584e).
Ora hai una migliore comprensione di come funzionano i rami e l'unione. È ora di iniziare a lavorare con un repository remoto!