git Usage
3 places
- working directory: the place you work on the files
- stage (index): directory storing files temporarily
- history: repository
configure git after installation
git config --global --edit
# then edit the file by entering your name and email in the template
create version controlled dir
mkdir test
cd test
git init
add file
git add file1.txt
git add file2.txt file3.txt
git add * # add all new/modified files & directories
git commit -m 'my comment'
- git add: submit changes in working dir to stage
- git commit: submit changes in stage to history
check status
git status
check modification
git diff file1.txt # diff between stage and wroking dir
git diff <branch> # diff between <branch> and working dir
git diff HEAD # diff between HEAD and working dir
git diff <commit1> <commit2>
git diff --cached # diff between HEAD and stage
check in modified files
git add file1.txt
git commit -m 'my modification'
'git add' puts changes to 'stage'; 'git commit' submits the stage, and 'HEAD' points to the latest result.
check file/repository history
git log file1.txt
git log
git log --pretty=oneline # simple output
note that version number in git is not sequential number, but a number computed with SHA1 algorithm.
check command history
git reflog
This also shows the version number (aka 'commit'), which can be used to go to a certain version.
go back to a prev version
git reset --hard version
Here, 'version' can be 'HEAD^' (prev version), 'HEAD^^' (version before the prev version), ..., 'HEAD~100' (to avoid too many '^' characters).
If we'd like to go back again to the last version, we can use 'git reflog' to retrieve the last commit (version number), and do 'git reset --hard last_commit' again.
discard modifications in working directory
git checkout -- file1.txt
Note: Double dash ("--") is basically a separator between options and parameters. In some situations it is not needed (optional), but it can be used to make sure git won't interpret some special file names as options.
Note: difference between reset and checkout:
- git reset: undo the most recent 'git add' by replacing files in stage with the ones in history
- git checkout: undo the most recent changes in working dir by replacing files with those in stage.
- git checkout HEAD: do both of the above two tasks.
git add -- -wierd_name.txt
revert modifications added to stage
git reset HEAD file1.txt # undo 'git add file1.txt'
git checkout -- file1.txt # undo the modification on file1.txt
revert committed modifications
git reset --hard HEAD^ # supposing it's not been sent to remote repository yet
commit directly
From working dir to history directory.
git commit file1.txt file2.txt
git commit -a
replace working dir with latest committed version
git checkout HEAD -- file1.txt file2.txt
delete file from repository
git rm file2.txt
git commit -m 'delete file'
git rm file1.txt
# undo the above operation
git reset HEAD file1.txt
git checkout -- file1.txt
git rm file1.txt
git commit -m 'delete it'
# undo the above operations
git reset --hard HEAD^
Useful Links