Git是什麼?
Git是目前世界上最先進的分佈式版本控制系統(沒有之一)。
Git有什麼特點?簡單來說就是:高端大氣上檔次!
那什麼是版本控制系統?
如果你用Microsoft Word寫過長篇大論,那你一定有這樣的經歷:
想刪除一個段落,又怕將來想恢復找不回來怎麼辦?有辦法,先把當前文件“另存爲……”一個新的Word文件,再接着改,改到一定程度,再“另存爲……”一個新文件,這樣一直改下去
本文出自(https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)
一下是我自己通過學習然後自己整理的一些命令,希望對學習git的人能有所幫助!
1、設置name和email 最好是GitHub的用戶名和郵件
git config --global user.name "yourname"
git config --global user.email "youremail"
2、查看git配置
git config --list
3、創建git管理目錄
$ mkdir learngit
進入當前目錄
$ cd learngit
查看當前目錄
$ pwd
/Users/michael/learngit
4、把這個目錄變成Git可以管理的倉庫
git init
5、查看.git目錄
ls -ah
6、把文件添加到倉庫
git add 文件名
7、把文件提交到倉庫
git commit -m "本次提交內容備註"
8、查看倉庫當前的狀態
git status
9、查看和git版本庫有什麼不同,可以查看修改了什麼內容,查看difference
git diff
10、查看提交日誌
git log
如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline參數:
git log --pretty=oneline
11、用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100
回退到上一個版本
git reset --hard HEAD^
回退到指定版本
git reset --hard commitId(具體版本的id)
12、記錄你的每一次命令
git reflog
13、查看工作區和版本庫裏面最新版本的區別
git diff HEAD -- <file>
14、把文件在工作區的修改全部撤銷
(命令git checkout -- readme.txt意思就是,把readme.txt文件在工作區的修改全部撤銷,這裏有兩種情況:
一種是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
一種是readme.txt已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。
總之,就是讓這個文件回到最近一次git commit或git add時的狀態。)
git checkout -- <file>
15、把暫存區的修改撤銷掉(unstage),重新放回工作區
git reset HEAD <file>
16、確實要從版本庫中刪除該文件
git rm刪掉,並且git commit
17、刪錯了,把誤刪的文件恢復到最新版本
git checkout -- <file>
遠程倉庫 依賴GitHub需要設置一些東西
第1步:創建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果已經有了,可直接跳到下一步。如果沒有,打開Git Bash,創建SSH Key:
ssh-keygen -t rsa -C "[email protected]"
第2步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面:然後,點“Add SSH Key”,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容:
18、要關聯一個遠程庫,使用命令git remote add origin git@server-name:path/repo-name.git;
19、關聯後,使用命令git push -u origin master第一次推送master分支的所有內容;
20、此後,每次本地提交後,只要有必要,就可以使用命令git push origin master推送最新修改;
21、克隆一個本地庫
git clone [email protected]:michaelliao/gitskills.git
22、創建dev分支,然後切換到dev分支(git checkout命令加上-b參數表示創建並切換)
git checkout -b dev
23、創建並切換
$ git branch dev
$ git checkout dev
24、查看當前分支
$ git branch
25、我們就可以切換回master分支
git checkout master
26、把dev分支的工作成果合併到master分支上
git merge dev
27、放心地刪除dev分支
git branch -d dev
小結
Git鼓勵大量使用分支:
查看分支:git branch
創建分支:git branch <name>
切換分支:git checkout <name>
創建+切換分支:git checkout -b <name>
合併某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>
28、用帶參數的git log也可以看到分支的合併情況
git log --graph --pretty=oneline --abbrev-commit
用git log --graph命令可以看到分支合併圖。
29、準備合併dev分支,請注意--no-ff參數,表示禁用Fast forward(合併要創建一個新的commit,所以加上-m參數,把commit描述寫進去)
git merge --no-ff -m "merge with no-ff" dev
合併分支時,加上--no-ff參數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併就看不出來曾經做過合併
30、把當前工作現場“儲藏”起來,等以後恢復現場後繼續工作
$ git stash
31、用git stash list命令查看存儲位置
git stash list
32、Git把stash內容存在某個地方了,但是需要恢復一下,有兩個辦法
git stash apply恢復,但是恢復後,stash內容並不刪除,你需要用git stash drop來刪除
另一種方式是用git stash pop,恢復的同時把stash內容也刪了
33、恢復指定的stash
git stash apply stash@{0}
34、如果要丟棄一個沒有被合併過的分支
git branch -D <name>強行刪除
35、查看遠程倉庫的信息
git remote
36、查看遠程倉庫更詳細信息
git remote -v
37、把本地指定分支的數據推送到遠程庫
git push origin master
38、創建遠程origin的dev分支到本地
git checkout -b dev origin/dev
39、多個人同時push代碼到遠程庫有衝突時
git pull把最新的提交從origin/dev抓下來,然後,在本地合併,解決衝突,再推送
40、git pull也失敗了,原因是沒有指定本地dev分支與遠程origin/dev分支的鏈接,根據提示,設置dev和origin/dev的鏈接,之後再重新git pull;
git branch --set-upstream-to=origin/dev dev
因此,多人協作的工作模式通常是這樣:
首先,可以試圖用git push origin <branch-name>推送自己的修改;
如果推送失敗,則因爲遠程分支比你的本地更新,需要先用git pull試圖合併;
如果合併有衝突,則解決衝突,並在本地提交;
沒有衝突或者解決掉衝突後,再用git push origin <branch-name>推送就能成功!
如果git pull提示no tracking information,則說明本地分支和遠程分支的鏈接關係沒有創建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
這就是多人協作的工作模式,一旦熟悉了,就非常簡單。
小結
查看遠程庫信息,使用git remote -v;
本地新建的分支如果不推送到遠程,對其他人就是不可見的;
從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠程的新提交;
在本地創建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致;
建立本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name;
從遠程抓取分支,使用git pull,如果有衝突,要先處理衝突。
41、rebase操作可以把本地未push的分叉提交歷史整理成直線;
rebase的目的是使得我們在查看歷史提交的變化時更容易,因爲分叉的提交需要三方對比。
git rebase