Basic terminology and overview Git branches and remotes · 2/2/17 1 Git branches and remotes Landon...

11
2/2/17 1 Git branches and remotes Landon Cox February 2, 2017 Basic terminology and overview Commit Object pointing to a snapshot Named by hash and stored as a tree Commits have parents that point to the previous snapshot Branch Pointer to a commit (and its snapshot) e.g., “master” Remote Collection of branches stored on a remote server e.g., a gitlab or github project https://git-scm.com/book/en/v2/ Basic terminology and overview Commit Object pointing to a snapshot Named by hash and stored as a tree Commits have parents that point to the previous snapshot Branch Pointer to a commit (and its snapshot) e.g., “master” Remote Collection of branches stored on a remote server e.g., a gitlab or github project A commit and its tree $> git add README test.rb LICENSE $> git commit -a -m “Initial commit” What are these funny hex numbers?

Transcript of Basic terminology and overview Git branches and remotes · 2/2/17 1 Git branches and remotes Landon...

Page 1: Basic terminology and overview Git branches and remotes · 2/2/17 1 Git branches and remotes Landon Cox February 2, 2017 Basic terminology and overview • Commit • Object pointing

2/2/17  

1  

Git branches and remotes

Landon Cox February 2, 2017

Basic terminology and overview •  Commit

•  Object pointing to a snapshot •  Named by hash and stored as a tree •  Commits have parents that point to the previous snapshot

•  Branch •  Pointer to a commit (and its snapshot) •  e.g., “master”

•  Remote •  Collection of branches stored on a remote server •  e.g., a gitlab or github project

https://git-scm.com/book/en/v2/

Basic terminology and overview •  Commit

•  Object pointing to a snapshot •  Named by hash and stored as a tree •  Commits have parents that point to the previous snapshot

•  Branch •  Pointer to a commit (and its snapshot) •  e.g., “master”

•  Remote •  Collection of branches stored on a remote server •  e.g., a gitlab or github project

A commit and its tree

$> git add README test.rb LICENSE$> git commit -a -m “Initial commit”

What are these funny hex numbers?

Page 2: Basic terminology and overview Git branches and remotes · 2/2/17 1 Git branches and remotes Landon Cox February 2, 2017 Basic terminology and overview • Commit • Object pointing

2/2/17  

2  

A commit and its tree

$> git add README test.rb LICENSE$> git commit -a -m “Initial commit”

Why will the commit hash change if I modify a file?

A commit and its tree

$> git add README test.rb LICENSE$> git commit -a -m “Initial commit”

best  

Commits and their parents What do I need to move from one

commit to another?

Basic terminology and overview •  Commit

•  Object pointing to a snapshot •  Named by hash and stored as a tree •  Commits have parents that point to the previous snapshot

•  Branch •  Pointer to a commit (and its snapshot) •  e.g., “master”

•  Remote •  Collection of branches stored on a remote server •  e.g., a gitlab or github project

Page 3: Basic terminology and overview Git branches and remotes · 2/2/17 1 Git branches and remotes Landon Cox February 2, 2017 Basic terminology and overview • Commit • Object pointing

2/2/17  

3  

A branch and its commit history Two branches w/ same commits

$> git branch testing

HEAD pointing to master branch

$> git log --oneline --decorate f30ab (HEAD -> master, testing) add …34ac2 Fixed bug #1328 - stack overflow …98ca9 The initial commit of my project

HEAD pointing to testing branch

$> git checkout testing

Page 4: Basic terminology and overview Git branches and remotes · 2/2/17 1 Git branches and remotes Landon Cox February 2, 2017 Basic terminology and overview • Commit • Object pointing

2/2/17  

4  

A new commit under testing

$> vi test.rb$> git commit -a -m “made a change”

Checking out master

$> git checkout master

A new commit under master

$> vi test.rb$> git commit -a -m “another change”

Given the diffs I have, can I integrate my testing changes into master?

Merging branches

Page 5: Basic terminology and overview Git branches and remotes · 2/2/17 1 Git branches and remotes Landon Cox February 2, 2017 Basic terminology and overview • Commit • Object pointing

2/2/17  

5  

Merging branches

$> git branch iss53$> git checkout iss53

$> git checkout -b iss53

Merging branches

$> vi index.html$> git commit -a -m “added a new footer [issue 53]”

Merging branches

$> git checkout master$> git checkout -b hotfix$> git commit -a -m “fixed broken link”

Merging branches

$> git checkout master$> git merge hotfix

Page 6: Basic terminology and overview Git branches and remotes · 2/2/17 1 Git branches and remotes Landon Cox February 2, 2017 Basic terminology and overview • Commit • Object pointing

2/2/17  

6  

Merging branches

$> git branch -d hotfix$> git checkout iss53$> vi index.html$> git commit -a –m “finished footer [issue 53]”

Merging branches

Merging branches

$> git checkout master$> git merge iss53

Merge commit: special commit created from three-

way merge

Merging branches •  Sometimes merges fail due to conflicts

•  Git cannot create the diffs to move one commit to another •  Often due to multiple changes to the line in a file

$> git merge iss53Auto-merging index.htmlCONFLICT (content): Merge conflict in index.htmlAutomatic merge failed; fix conflicts and then commit the result.

Page 7: Basic terminology and overview Git branches and remotes · 2/2/17 1 Git branches and remotes Landon Cox February 2, 2017 Basic terminology and overview • Commit • Object pointing

2/2/17  

7  

Merging branches •  Sometimes merges fail due to conflicts

•  Git cannot create the diffs to move one commit to another •  Often due to multiple changes to the line in a file

$ git statusOn branch masterYou have unmerged paths. (fix conflicts and run "git commit")

Unmerged paths: (use "git add <file>..." to mark resolution)

both modified: index.html

no changes added to commit (use "git add" and/or "git commit -a")

Edit files to manually resolve the conflict.

Merging branches •  Sometimes merges fail due to conflicts

•  Git cannot create the diffs to move one commit to another •  Often due to multiple changes to the line in a file

<<<<<<< HEAD:index.html<div id="footer">contact : [email protected]</div>=======<div id="footer"> please contact us at [email protected]</div>>>>>>>> iss53:index.html

Inside the conflicted file (index.html in example)

Merging branches •  Sometimes merges fail due to conflicts

•  Git cannot create the diffs to move one commit to another •  Often due to multiple changes to the line in a file

<<<<<<< HEAD:index.html<div id="footer">contact : [email protected]</div>=======<div id="footer"> please contact us at [email protected]</div>>>>>>>> iss53:index.html

Content in master branch (since HEAD pointed to master during merge)

Content in iss53 branch

Merging branches •  Sometimes merges fail due to conflicts

•  Git cannot create the diffs to move one commit to another •  Often due to multiple changes to the line in a file

<div id="footer"> please contact us at [email protected]</div>

Content of conflicted file after manual resolution.

(i.e., kept the iss53 content, removed <<<, ===, and >>> lines)

Page 8: Basic terminology and overview Git branches and remotes · 2/2/17 1 Git branches and remotes Landon Cox February 2, 2017 Basic terminology and overview • Commit • Object pointing

2/2/17  

8  

Merging branches •  Sometimes merges fail due to conflicts

•  Git cannot create the diffs to move one commit to another •  Often due to multiple changes to the line in a file

•  Once conflict has been resolved, add and commit

$> git add index.html$> git commit

Rebasing branches

Basic terminology and overview •  Commit

•  Object pointing to a snapshot •  Named by hash and stored as a tree •  Commits have parents that point to the previous snapshot

•  Branch •  Pointer to a commit (and its snapshot) •  e.g., “master”

•  Remote •  Collection of branches stored on a remote server •  e.g., a gitlab or github project

Remote branches

“origin” = default name of remote repo “master” = branch of remote repo

Page 9: Basic terminology and overview Git branches and remotes · 2/2/17 1 Git branches and remotes Landon Cox February 2, 2017 Basic terminology and overview • Commit • Object pointing

2/2/17  

9  

Remote branches

$> mkdir project$> cd project$> git init$> git remote add origin [email protected]:project.git$> git fetch origin$> git merge origin/master

Equivalent commands to clone.

Remote branches

$> mkdir project$> cd project$> git init$> git remote add origin [email protected]:project.git$> git fetch origin$> git merge origin/master

“origin” is local name for this remote

Remote branches

$> mkdir project$> cd project$> git init$> git remote add origin [email protected]:project.git$> git fetch origin$> git merge origin/master

fetch retrieves data for remote

merge remote/branch into local repo

Remote branches

$> mkdir project$> cd project$> git init$> git remote add jane [email protected]:project.git$> git fetch jane$> git merge jane/master

Can name remote whatever you want, e.g., “jane”

Page 10: Basic terminology and overview Git branches and remotes · 2/2/17 1 Git branches and remotes Landon Cox February 2, 2017 Basic terminology and overview • Commit • Object pointing

2/2/17  

10  

Remote branches

$> mkdir project$> cd project$> git init$> git remote add origin [email protected]:project.git$> git fetch origin$> git merge origin/master

“git pull” is shorthand for fetch and merge

Remote branches

$> mkdir project$> cd project$> git init$> git remote add origin [email protected]:project.git$> git pull origin master

“git pull” is shorthand for fetch and merge

Remote branches

$> mkdir project$> cd project$> git init$> git remote add origin [email protected]:project.git$> git pull origin master

Note that because pull merges, it can lead to conflicts

Remote branches

$> mkdir project$> cd project$> git init$> git remote add origin [email protected]:project.git$> git remote –v

“git remote –v” prints all the remotes you’ve linked

Page 11: Basic terminology and overview Git branches and remotes · 2/2/17 1 Git branches and remotes Landon Cox February 2, 2017 Basic terminology and overview • Commit • Object pointing

2/2/17  

11  

Remote branches

$> mkdir project$> cd project$> git init$> git remote add origin [email protected]:project.git$> git remote rm origin

“git remote rm” removes a remote

How to work with your group project