Git命令

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章