Using Git with GUI
There are huge amounts of git commands! There are also a lot of GUIs if you don’t like command line.
- To check all the commits related to a file, use
git log -u.
- Try out
git log -gbefore determining which reflog to deal with.
- To compare the changes with the last commit, use
git diff --cached HEAD~1.
A very useful article here: Must Have Git Aliases: Advanced Examples.
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
[alias] section of
ll = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --numstat
P: I am too lazy to type in
git add ..
S: The magic potion is
git commit -a which will do the staging and
commit at the same time.
P: What has been changed since the latest stage?
git diff shows that.
P: I typed in the wrong commit message.
git commit --amend will allow you to change the commit message
you typed in before.
P: I forgot to put add some files.
S: Just add the file and use
git commit --amend. This will allow you
to replace the previous commit.
P: I accidentally added a file to staging.
S: Should unstage the file.
git reset HEAD filename.md will do.
P: I want to discard the changes I made since the latest commit.
S: This can be dangerous.
git checkout -- filename.md can revert
everything back to the last commit. But it discards all the changes and
can not be recovered. DO NOT USE IT.
P: I need to check what has changed in every commits.
git log --stat will show the changed files.
P: I want to create a new branch based on the current branch.
git checkout -b newbranchname is for you.
P: I hate a branch called “wth” and want to delete it.
git branch -d wth.
P: I want to change the name of a branch “wth” to “wtf”.
git branch -m wth wtf or checkout to the branch “wth” and use
git branch -m wtf.
P: Merge “goaway” branch to master branch.
S: Checkout to master branch and
git merge goaway.
P: Merge conflicts?
S: Check the conflicts using
git status. Open up the conflict file
and you will see.
P: So hard to resolve the conflicts.
git mergetool will use a graphical tool.
It is not necessary to use hosted git services like github.com. Git remote can be on your local laptop or simply on another laptop that can be accessed by your local repo.
A Very Basic Git Server
Since git is de-centralized, it would be nice to in fact create multiple ‘backups’ on different machines. A git server would do this perfectly. The bottom lines is you set up a git server and work everywhere even on a new computer.
Initialize a git repo on server so that you can push to.
cd <the path you want to put your git folder> git init --bare yourreponame.git
Then a folder named
yourreponame.gitwill be created under
<the path you want to put your git folder>.
One your local machine, using
git clone ssh://<yourusername>@<your.server.name>/<path to repo>will clone the empty repo to your local machine.
Here I’ll use my own machine as an example. After setting up the git server, I create initialized empty git repo on this server, under path
/home/neutrino/gitserver/ (where neutrino is my user name on this ubuntu machine)
git init --bare codebase.git
Then I find this folder named
codebase.git under this path
/home/neutrino/gitserver/. The work on the server-side is done now. This server has a name
physicists.edu (which I made up), on my local machine I clone it by
git clone ssh://[email protected]/home/neutrino/gitserver/codebase.git
Whatever follows is to cd to this folder and start working on local machine then add, commit, and push.
Push Existing Repos
What if I already have a repo locally and need to push it to this new server? Use
git remote add . Here is an example.
git remote add newgitserver ssh://[email protected]/home/neutrino/gitserver/codebase.git
newgitserver to whatever you like. After that
git push newgitserver will push the codes to the new server.
Alternatively, you can change
.git/config and name this new one the origin.
Check out the instructions.