git branches and remotesdb.cs.duke.edu/.../notes/feb2/git2-spring17.pdf · merging branches •...
Post on 23-Aug-2020
1 Views
Preview:
TRANSCRIPT
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?
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
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
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
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
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.
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.support@github.com</div>=======<div id="footer"> please contact us at support@github.com</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.support@github.com</div>=======<div id="footer"> please contact us at support@github.com</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 support@github.com</div>
Content of conflicted file after manual resolution.
(i.e., kept the iss53 content, removed <<<, ===, and >>> lines)
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
Remote branches
$> mkdir project$> cd project$> git init$> git remote add origin janedoe@git.ourcompany.com: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 janedoe@git.ourcompany.com: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 janedoe@git.ourcompany.com: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 janedoe@git.ourcompany.com:project.git$> git fetch jane$> git merge jane/master
Can name remote whatever you want, e.g., “jane”
Remote branches
$> mkdir project$> cd project$> git init$> git remote add origin janedoe@git.ourcompany.com: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 janedoe@git.ourcompany.com: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 janedoe@git.ourcompany.com: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 janedoe@git.ourcompany.com:project.git$> git remote –v
“git remote –v” prints all the remotes you’ve linked
Remote branches
$> mkdir project$> cd project$> git init$> git remote add origin janedoe@git.ourcompany.com:project.git$> git remote rm origin
“git remote rm” removes a remote
How to work with your group project
top related