Git - Versus
git fetch vs git pull
git pull
= git fetch
+ git merge
git fetch
: remote repo to local repo.git merge
: local repo to working directory.git pull
: remote repo to local repo AND working directory.
check if local repo is up to date
$ git fetch --dry-run
git checkout vs git switch
git switch -c <branch name>
is equivalent to git checkout -b <branch name>
.
To replace two common uses of git checkout
: git switch
to switch to a new branch after creating it if necessary, and git restore
to restore changes from a given commit.
git rebase vs git merge
Both are designed to integrate changes from one branch into another branch.
git merge feature main
will create a new "merge commit" in thefeature
branch to incorporate chagnes in themain
branch.git rebase main
will move thefeature
on top of themain
branch (incorporating all new commits in themain
branch.) Much cleaner project history.
Patch a CL: checkout vs branch vs cherry-pick vs pull
before patch:
local_commit
origin/HEAD
Checkout and create a new branch
$ git fetch foo bar && git checkout -b baz FETCH_HEAD
You will be in a new baz
branch
Checkout
$ git fetch foo bar && git checkout FETCH_HEAD
You will be in a HEAD detached at FETCH_HEAD
branch (use git checkout -b baz
to create a new baz
branch)
Cherry-pick
$ git fetch foo bar && git cherry-pick FETCH_HEAD
You will stay in the main
branch, check git log
:
remote_commit
local_commit
origin/HEAD
Pull and rebase
$ git pull foo bar --rebase
You will stay in the main
branch, check git log
:
local_commit
remote_commit
origin/HEAD
Pull and merge
$ git pull foo bar --no-rebase (i.e. merge)
You will stay in the main
branch, check git log
:
merge_commit
local_commit
remote_commit
origin/HEAD
https vs ssh
You can use either https or ssh to connect to remote repo:
- https:
https://github.com/foo/bar.git
- it will ask for your username and password when you try to connect remote repo
- git:
[email protected]:foo/bar.git
- it uses ssh keys to verify you identity.
- Copy and paste your public key(
~/.ssh/id_rsa.pub
) to Github account - Specify the private key in
~/.ssh/config
as
- Copy and paste your public key(
Host heroku.com
HostName heroku.com
IdentityFile /Users/username/.ssh/heroku_key
To check your remote
$ git remote show origin
* remote origin
Fetch URL: https://github.com/foo/bar.git
Push URL: https://github.com/foo/bar.git
HEAD branch: master