yum install gitgit
yum remove gitgithub
$ git config --global user.name "Your Name"網絡
$ git config --global user.email email@example.comapp
首先,選擇一個合適的地方,建立一個空目錄:ssh
$ mkdir learngitfetch
$ cd learngitspa
$ pwd指針
/Users/michael/learngit日誌
第二步,經過git init
命令把這個目錄變成Git能夠管理的倉庫:code
$ git init
Initialized empty
Git repository
in /
Users/michael/learngit/.git/
編寫一個readme.txt文件,內容以下:
Git is a version control system.
Git is free software.
第一步,用命令git add告訴Git,把文件添加到倉庫:
$ git add readme.txt
第二步,用命令git commit告訴Git,把文件提交到倉庫(-m後面輸入的是本次提交的說明):
$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
爲何Git添加文件須要add,commit一共兩步呢?由於commit能夠一次提交不少文件,因此你能夠屢次add不一樣的文件,好比:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
要隨時掌握工做區的狀態,使用git status命令。
若是git status告訴你有文件被修改過,用git diff能夠查看修改內容
在Git中查看歷史記錄,顯示從最近到最遠的提交日誌:
$ git log
$ git log --pretty=oneline
一大串相似3628164...882e1e0的是commit id(版本號)
$ git reset --hard HEAD^
用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,固然往上100個版本寫100個^比較容易數不過來,因此寫成HEAD~100。
或:
$ git reset --hard 3628164(3628164指版本號)
版本號不必寫全,前幾位就能夠了,Git會自動去找。固然也不能只寫前一兩位,由於Git可能會找到多個版本號,就沒法肯定是哪個了。
Git提供了一個命令git reflog用來記錄你的每一次命令:
工做區(Working Directory)
就是你在電腦裏能看到的目錄,好比個人learngit文件夾就是一個工做區
版本庫(Repository)
工做區有一個隱藏目錄.git,這個不算工做區,而是Git的版本庫。
Git的版本庫裏存了不少東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲咱們自動建立的第一個分支master,以及指向master的一個指針叫HEAD。
git diff HEAD -- readme.txt命令能夠查看工做區和版本庫裏面最新版本的區別:
丟棄工做區的修改:
$ git checkout -- readme.txt
把暫存區的修改撤銷掉(unstage),從新放回工做區:
$ git reset HEAD readme.txt
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
$ ssh-keygen -t rsa -C youremail@example.com
打開「Account settings」,「SSH Keys」頁面:
而後,點「Add SSH Key」,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容
登錄GitHub,而後,在右上角找到「Create a new repo」按鈕,建立一個新的倉庫:
在本地的learngit倉庫下運行命令:
$ git remote add origin git@github.com:JaceyKan/LearnPython.git
遠程庫的名字就是origin,這是Git默認的叫法,也能夠改爲別的,可是origin這個名字一看就知道是遠程庫
下一步,就能夠
$ git push -u origin master
因爲遠程庫是空的,咱們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在之後的推送或者拉取時就能夠簡化命令。
從如今起,只要本地做了提交,就能夠經過命令:
$ git push origin master
用命令git clone克隆一個本地庫:
$ git clone git@github.com:JaceyKan/gitskills.git
ssh: Could not resolve hostname github.com: Name or service not known
fatal: The remote end hung up unexpectedly
緣由:網絡不通,沒法ping通github
設置好網絡就能夠了
首先,咱們建立dev分支,而後切換到dev分支:
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout命令加上-b參數表示建立並切換,至關於如下兩條命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
而後,用git branch命令查看當前分支:
$ git branch
* dev
master
切換回master分支:
$ git checkout master
Switched to branch 'master'
合併指定分支到當前分支,把dev分支的工做成果合併到master分支上:
$ git merge dev
Updating d17efd8..fec145a
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
刪除dev分支:
$ git branch -d dev
Deleted branch dev (was fec145a).
查看分支:git branch
建立分支:git branch <name>
切換分支:git checkout <name>
建立+切換分支:git checkout -b <name>
合併某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>
用帶參數的git log也能夠看到分支的合併狀況:
$ git log --graph --pretty=oneline --abbrev-commit
* 59bc1cb conflict fixed
|\
| * 75a857c AND simple
* | 400b400 & simple
|/
* fec145a branch test
...
準備合併dev分支,請注意--no-ff參數,表示禁用Fast forward:
$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)
由於本次合併要建立一個新的commit,因此加上-m參數,把commit描述寫進去。
把當前工做現場「儲藏」起來,等之後恢復現場後繼續工做:
$ git stash
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge
查看被儲藏起來的工做現場:
$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
工做現場還在,Git把stash內容存在某個地方了,可是須要恢復一下,有兩個辦法:
一是用git stash apply恢復,可是恢復後,stash內容並不刪除,你須要用git stash drop來刪除;
另外一種方式是用git stash pop,恢復的同時把stash內容也刪了:
能夠屢次stash,恢復的時候,先用git stash list查看,而後恢復指定的stash,用命令:
$ git stash apply stash@{0}
強行刪除分支:
$ git branch -D feature-vulcan
查看遠程庫的信息:
$ git remote
origin
或者顯示更詳細的信息:
$ git remote -v
origin git@github.com:michaelliao/learngit.git (fetch)
origin git@github.com:michaelliao/learngit.git (push)
上面顯示了能夠抓取和推送的origin的地址。若是沒有推送權限,就看不到push的地址。
推送分支,就是把該分支上的全部本地提交推送到遠程庫。
推送時,要指定本地分支:
$ git push origin master
多人協做的工做模式
1.首先,能夠試圖用git push origin branch-name推送本身的修改;
2.若是推送失敗,則由於遠程分支比你的本地更新,須要先用git pull試圖合併;
3.若是合併有衝突,則解決衝突,並在本地提交;
4.沒有衝突或者解決掉衝突後,再用git push origin branch-name推送就能成功!
5.若是git pull提示「no tracking information」,則說明本地分支和遠程分支的連接關係沒有建立,用命令
git branch --set-upstream branch-name origin/branch-name