先把用過的指令List出來
git init
Create an empty git repository or reinitialize an existing one
git add
Add file contents to the index
git commit
Record changes to the repository
git log
Show commit logs.
git config
Get and set repository or global options.
git branch
List, create, or delete branches.
git checkout
Checkout a branch or paths to the working tree.
git clone
Clone a repository into a new directory.
建立Local Repository並且加入新檔
brook@vista:~/git_test$ git init Initialized empty Git repository in /home/brook/git_test/.git/ brook@vista:~/git_test$ echo 1 > a.txt brook@vista:~/git_test$ git add . brook@vista:~/git_test$ git commit -a -m "init version" [master (root-commit) 3f4bf46] init version 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 a.txt brook@vista:~/git_test$ git log --stat commit 3f4bf46a188e676104bd8bb929a8ba85e85bb536 Author: Brook <rene3210@> Date: Sat Dec 4 22:21:16 2010 +0800 init version a.txt | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
透過ssh複製遠端的Repository
brook@vista:~/git_test2$ git clone ssh://brook@127.0.0.1/home/brook/git_test/ . Initialized empty Git repository in /home/brook/git_test2/git_test/.git/ brook@127.0.0.1's password: remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done. brook@vista:~/git_test2$ ls a.txt
建立branch/複製遠端的branch
brook@vista:~/git_test$ git branch 顯示目前的branch * master brook@vista:~/git_test$ git branch new_branch建立一個名為new_branch的branch brook@vista:~/git_test$ git branch * master new_branch brook@vista:~/git_test$ git checkout new_branch 切換到new_branch Switched to branch 'new_branch' brook@vista:~/git_test$ git branch master * new_branch 複製遠端的branch brook@vista:~/git_test2$ git checkout --track origin/new_branch Branch new_branch set up to track remote branch new_branch from origin. Switched to a new branch 'new_branch' brook@vista:~/git_test2$ git branch master * new_branch
利用pull(下載)/push(上傳)更新資料
利用pull更新資料 brook@vista:~/test$ mkdir git1 brook@vista:~/test$ mkdir git2 brook@vista:~/test$ cd git1/ brook@vista:~/test/git1$ git init Initialized empty Git repository in /home/brook/test/git1/.git/ brook@vista:~/test/git1$ echo "01" > 01.txt brook@vista:~/test/git1$ git add 01.txt brook@vista:~/test/git1$ git commit -a -m "v1" [master (root-commit) 6d3302a] v1 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 01.txt brook@vista:~/test/git1$ cd ../git2 brook@vista:~/test/git2$ git clone ../git1 . Initialized empty Git repository in /home/brook/test/git2/.git/ brook@vista:~/test/git2$ ls 01.txt brook@vista:~/test/git2$ cd ../git1 brook@vista:~/test/git1$ echo "012" > 01.txt brook@vista:~/test/git1$ git commit -a -m "v2" [master 9824999] v2 1 files changed, 1 insertions(+), 1 deletions(-) brook@vista:~/test/git1$ cd ../git2/ brook@vista:~/test/git2$ git pull remote: Counting objects: 5, done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From /home/brook/test/git2/../git1 6d3302a..9824999 master -> origin/master Updating 6d3302a..9824999 Fast-forward 01.txt | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) brook@vista:~/test/git2$ cat 01.txt 012 利用push(上傳)更新資料 brook@vista:~/test/git2$ echo "0123" > 01.txt brook@vista:~/test/git2$ git commit -a -m "v3" [master 3dd46af] v3 1 files changed, 1 insertions(+), 1 deletions(-) brook@vista:~/test/git2$ git push Counting objects: 5, done. Writing objects: 100% (3/3), 231 bytes, done. Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. remote: error: refusing to update checked out branch: refs/heads/master remote: error: By default, updating the current branch in a non-bare repository remote: error: is denied, because it will make the index and work tree inconsist ent remote: error: with what you pushed, and will require 'git reset --hard' to matc h remote: error: the work tree to HEAD. remote: error: remote: error: You can set 'receive.denyCurrentBranch' configuration variable t remote: error: 'ignore' or 'warn' in the remote repository to allow pushing int remote: error: its current branch; however, this is not recommended unless you remote: error: arranged to update its work tree to match what you pushed in som remote: error: other way. remote: error: remote: error: To squelch this message and still keep the default behaviour, se remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'. To /home/brook/test/git2/../git1 ! [remote rejected] master -> master (branch is currently checked out) error: failed to push some refs to '/home/brook/test/git2/../git1' brook@vista:~/test/git2$ vim ../git1/.git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [receive] denyCurrentBranch = false brook@vista:~/test/git2$ git push Counting objects: 5, done. Writing objects: 100% (3/3), 231 bytes, done. Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/brook/test/git2/../git1 9824999..3dd46af master -> master brook@vista:~/test/git2$ cd ../git1 brook@vista:~/test/git1$ git log -1 commit 3dd46af43524c4e81597f392f58899c78faf087b Author: Brook <rene3210@> Date: Wed Dec 15 22:37:39 2010 +0800 v3
merge預設會將每一個change重作一次
rook@vista:~/git$ git init Initialized empty Git repository in /home/brook/git/.git/ brook@vista:~/git$ echo "01" > 01.txt brook@vista:~/git$ git add 01.txt brook@vista:~/git$ git commit -a -m "v1" [master (root-commit) 0b7b5ea] v1 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 01.txt brook@vista:~/git$ git branch my_branch brook@vista:~/git$ git checkout my_branch Switched to branch 'my_branch' brook@vista:~/git$ git branch master * my_branch brook@vista:~/git$ echo "012" > 01.txt brook@vista:~/git$ git commit -a -m "v2" [my_branch de5e153] v2 1 files changed, 1 insertions(+), 1 deletions(-) brook@vista:~/git$ echo "0123" > 01.txt brook@vista:~/git$ git commit -a -m "v3" [my_branch a8d702d] v3 1 files changed, 1 insertions(+), 1 deletions(-) brook@vista:~/git$ echo "01234" > 01.txt brook@vista:~/git$ git commit -a -m "v4" [my_branch 8bae340] v4 1 files changed, 1 insertions(+), 1 deletions(-) brook@vista:~/git$ git log commit 8bae34004943242020b4e1b54726ae1bb77bb991 Author: Brook <rene3210@> Date: Wed Dec 15 22:50:43 2010 +0800 v4 commit a8d702da300bbf643c5b7a7f3be60d7133658b5f Author: Brook <rene3210@> Date: Wed Dec 15 22:50:26 2010 +0800 v3 commit de5e153e8f3414ede60891c21686811b2cf704a6 Author: Brook <rene3210@> Date: Wed Dec 15 22:50:16 2010 +0800 v2 commit 0b7b5ead8e486ba7dc3f1dc75498f27ebd008805 Author: Brook <rene3210@> Date: Wed Dec 15 22:49:11 2010 +0800 v1 brook@vista:~/git$ git checkout master Switched to branch 'master' brook@vista:~/git$ git merge my_branch Updating 0b7b5ea..8bae340 Fast-forward 01.txt | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) brook@vista:~/git$ cat 01.txt 01234 brook@vista:~/git$ git log commit 8bae34004943242020b4e1b54726ae1bb77bb991 Author: Brook <rene3210@> Date: Wed Dec 15 22:50:43 2010 +0800 v4 commit a8d702da300bbf643c5b7a7f3be60d7133658b5f Author: Brook <rene3210@> Date: Wed Dec 15 22:50:26 2010 +0800 v3 commit de5e153e8f3414ede60891c21686811b2cf704a6 Author: Brook <rene3210@> Date: Wed Dec 15 22:50:16 2010 +0800 v2 commit 0b7b5ead8e486ba7dc3f1dc75498f27ebd008805 Author: Brook <rene3210@> Date: Wed Dec 15 22:49:11 2010 +0800 v1
subversion方式的merge(squash)
brook@vista:~/git$ git init Initialized empty Git repository in /home/brook/git/.git/ brook@vista:~/git$ echo "01" > 01.txt brook@vista:~/git$ git add . brook@vista:~/git$ git commit -a -m "v1" [master (root-commit) fbf643a] v1 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 01.txt brook@vista:~/git$ git branch my_branch brook@vista:~/git$ git checkout my_branch Switched to branch 'my_branch' brook@vista:~/git$ echo "012" > 01.txt brook@vista:~/git$ git commit -a -m "v2" [my_branch 51c6575] v2 1 files changed, 1 insertions(+), 1 deletions(-) brook@vista:~/git$ echo "0123" > 01.txt brook@vista:~/git$ git commit -a -m "v3" [my_branch 67873cb] v3 1 files changed, 1 insertions(+), 1 deletions(-) brook@vista:~/git$ git log commit 67873cb645636a0ab70309cfa65b678ed49eb2b9 Author: Brook <rene3210@> Date: Wed Dec 15 22:58:42 2010 +0800 v3 commit 51c6575ba88dcfb8a3cfd19b2b4d36ae85fd5ac1 Author: Brook <rene3210@> Date: Wed Dec 15 22:58:37 2010 +0800 v2 commit fbf643a72076d43c16a089c2fe330c357bba004e Author: Brook <rene3210@> Date: Wed Dec 15 22:58:12 2010 +0800 v1 brook@vista:~/git$ git checkout master Switched to branch 'master' brook@vista:~/git$ git merge --squash my_branch Updating fbf643a..67873cb Fast-forward Squash commit -- not updating HEAD 01.txt | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) brook@vista:~/git$ git commit -a -m "merge with squash" [master eefb013] merge with squash 1 files changed, 1 insertions(+), 1 deletions(-) brook@vista:~/git$ git log commit eefb0132ae0c1eaa40b746bca7b5440c54e63cb2 Author: Brook <rene3210@> Date: Wed Dec 15 23:00:49 2010 +0800 merge with squash commit fbf643a72076d43c16a089c2fe330c357bba004e Author: Brook <rene3210@> Date: Wed Dec 15 22:58:12 2010 +0800 v1