Git 學習小結及命令匯總

安裝:

windows安裝git-- msysgit是windows版的git,下載單獨的.exe按照默認選項安裝即可? 在開始菜單找git-->git bash,會跳出命令行窗口,表示安裝成功。輸入命令git config --global user.name“你的名字” gitconfig --global user.email“你的郵箱”進行設置

創建版本庫(repository):

? ? mkdir 要創建的目錄名

? ? cd 要創建的目錄名

? ? pwd -->這個命令是顯示當前目錄的

? ? git init -->把目錄變成git可管理的倉庫,此時看到路徑有.git,若沒有,可能默認隱藏了,通過ls -ah命令可以看到


添加文件:

? ? git add文件名-->添加文件,回車后窗口并沒有給什么反應

? ? git commit -m“本次說明”-->把文件提交到倉庫,-m后面輸入的是本次提交的說明

? ? 另外說明:為什么需要add和commit兩步呢?因為commit可以一次提交多個文件

例如:gitadd file1.txt

? ? ? ? ? ?git add file2.txt file.txt

? ? ? ? ? ?git commit -m“add 3 file.”


時光機穿梭:

git status -->若更改文件內容,可以通過這個命令查看當前狀態,是否被修改了,修改后是否提交

git diff文件名-->可以查看根據命令輸出看到哪里做了修改 修改后提交的步驟依然是add commit,在commit之前運行status看一下當前倉庫狀態

git status -->可以看到要提交的包括剛剛修改的文件,然后commit一下,繼續status

git status -->會告訴我們沒有需要提交的修改,工作目錄是干凈的(working directory clean)

git log -->查看提交的歷史記錄,從最近到最遠的方式顯示

git log --pretty=oneline -->看到的一長串是commit

id(版本號),是SHA1計算出來的用十六進制表示的數字

時光機:

git reset --hard HEAD^ -->回退到上一個版本

cat文件名-->查看當前版本的內容,看一下是不是我們要回退的這個版本,此時log已經看不到最新那個版本記錄

git reset --hard最新版本的前幾位commit id -->回到最新版本,如果找的多個版本號,cat一下看看內容 不要忘記git commit

git reflog -->可以查看每一次命令的commit id

工作區(working directory)和暫存區(stage):

add是把工作區文件添加進暫存區,commit是從暫存區到分支上(版本庫包括暫存區和分支),必須先add到暫存區,才能commit到分支上


撤銷修改:

git checkout --文件名-->在工作區的修改全部撤銷,一是修改后還沒有add到暫存區,就回到和版本庫一樣的狀態,就是回到最近一次commit的狀態;一是已經add暫存區,又做了修改,是回到add暫存區的狀態,就是最近一次add的狀態。

git reset HEAD文件名-->把暫存區的修改撤銷(unstage),重新回到工作區,checkout--文件名丟棄工作區的修改

gitreset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當用HEAD時,表示最新版本。

刪除文件:

rm文件名-->在工作區刪除一個已經提交了的文件,現在是版本庫和工作區不一致,status可以看到哪些被刪了:

一是確定是要刪掉這個文件,

? ? git rm

?? ?git commit-->通過這兩個命令,文件就從版本庫中刪除了

一是刪錯了的情況,由于此時版本庫里還有這個文件

? ? git checkout --文件名-->現在就是回到最近的版本庫狀態了


遠程倉庫:(用github為例)

git常用命令

1,首先需要SSH KEY(在用戶主目錄下.ssh文件夾下有id_ras(私鑰)和id_ras.pub(公鑰)),沒有的話,打開Git Bash創建ssh-keygen -t rsa -C“你的郵箱”,然后一路回車

2,登錄github,打開account setting,ssh keys頁面,點擊add ssh key,填上任意title,在key里粘貼id_ras.pub文件的內容,然后點擊add key。(需要ssh是因為github需要識別推送的消息是否是你推送的)在github上創建倉庫,Create a new repo-->在repository name填寫倉庫名,其他地方默認,create repository,添加成功在新的界面可以看到github給的信息:可以從這個倉庫克隆新的倉庫,也可以與已有的本地倉庫進行關聯,把本地倉庫的內容push到github倉庫。

我們在本地倉庫運行如下命令:

git remote add origin git@github.com:github賬戶名/倉庫名.git

--> git對遠程庫默認的叫法--origin

下一步把本地內容推送到遠程:

git push -u origin master-->git push是把當前分支master推送到遠程。由于當前遠程是空的,第一次推送時加上了-u的參數,git會把本地master和遠程master關聯起來,后續的推送和拉取就可以簡化命令。

git push origin master-->后續就可以通過這個命令從本地進行提交

git push origin HEAD: 遠程分支名 -->本地分支名和遠程分支名不同的情況下用的命令(你必須在要push的本地分支上)

SSH警告:

第一次使用clone或者push命令連接github時會有警告,

警告

這是因為SSH在第一次驗證github服務器的key時,需要確認gtithub的key指紋信息是否為來自github服務器,輸入yes即可,然后github反饋給你一個把key添加到本機的信任列表里了的警告,繼續yes(在輸入之前可以對照github的RAS key的指紋信息是否與SSH連接給出的一致)。

從遠程克隆倉庫:在github創建一個新的倉庫,需要勾選Initialize this repository with a README,這樣github會自動創建一個README.md文件。

git clone git@github.com:github賬號名/工程名.git-->把倉庫克隆到本地

cd倉庫名-->把git庫的地址切換成自己的

ls -->查看本地存在的文件。(git支持多種協議,包括https(速度慢,每次推送都必須輸入口令),ssh)


分支管理:

創建與合并分支--》HEAD指向master(當前分支),master指向提交,

git checkout -b分支名-->創建一個新的分支,-b(branch)表示創建并切換,相當于兩條命令,

git branch -->會列出所有分支進行查看,在當前分支前加*。

git checkout master-->回到master分支上

git merge要合并分支名-->用于合并指定分支到當前分支

git branch -d分支名-->刪除分支

git branch -f指定分支名要移動到的分支--》把指定的分支名移動到要移動的分支去

git reset local^/ git reset HEAD~1--》都是撤回本地分支local到它的父部

git revert HEAD --》撤回遠程分支最近提交的信息重新生成這個分支

git cherry-pick <commit1><commit2><...>--》如果你想將一些提交復制到你當前HEAD位置下,這是很直接的推進方式

git rebase -i HEAD~4 --》是指當前分支位置并包含當前位置往父部共4個位置進行一個界面化交互的操作

交互命令

git commit --amend --》提交修改,在當前分支重新生成新的分支,棄用當前的

git describr -->用來顯示里當前分支最近的tag錨點,可以被commit的位置,沒有指定的話代表當前位置輸出信息:離最近的tag_這個tag離有多少commit_g當前id的前7位(v1_2_g3234rt5

git bisect一個找尋有bug的commit命令

git fetch從遠端獲取本地倉庫未包含的提交數據,即將本地對遠端的映射做了同步更新

git pull == git fetch;git merge在一起的效果

git pull --rebase是fetch和rebase的合用效果

git fakeTeamwork默認行為是在遠端master做一個提交

追蹤遠端的兩種方法:

1,git checkout -b分支名origin/master --》創建一個跟蹤origin/master的新分支(不是master了)

2,git branch -u origin/master分支名

git push :git push origin master--》切到master分支,抓取所有的提交推送到遠端的master分支,基本上用于同步兩倉庫(在分支上push后沒有參數命令是沒有效果的)

git push origin::git push origin foo^:master--》foo^指foo分支的父部,表示推送foo分支父部與遠端master同步,如果遠端的master是branch分支,實際是不存在的,git會在遠端為你創建。

git fetch origin foo(分支名)--》在本地foo分支進行遠端同步

git fetch origin ::git fetch origin foo~1:bar --》表示本地bar分支同步到遠端foo分支的父部;和push相似,但是方向相反,push是推送,fetch是下載

另外有兩種不需要的情況,這是通過空參數實現的。

1,git push origin :foo -->遠端會刪除foo這個分支

2,git fetch origin :foo --》本地會創建一個新的分支

pull和fetch的等價

^和~后不跟數字都是默認父部,跟數字,就從當前開始到數字的那個父部

(gitbranch bugWork HEAD~^2~創建分支bugWork同時移動到指定位置)

解決沖突,兩個分支同時更改了文件并都沒有更新提交后合并就會產生沖突,這是我們打開文件會看到git標記的沖突的地方,進行修改后,把沖突標記更改為已解決,然后在add提交合并。

git log --graph --pretty=oneline --abbrev-commit-->這個命令可以看到分支合并的情況

此時可以branch -d分支了。

分支管理:通常合并分支,如果可能,git會用fast forward模式,但是這種模式下刪除分支,會丟掉分支信息。如果禁用fast forward模式,git會在merge時生成新的commit,就可以從歷史看出分支信息

一個分支對文件進行更改并提交,但是合并時我們用了這個命令

git merge --no-ff -m "描述"要合并來的分支名--> --no-ff表示禁用fast forward

此時對分支進行刪除后

git log --graph --pretty=oneline --abbrev-commit

-->此時是可以看到分支的信息的

bug分支每個bug都可以通過一個新的臨時分支來修復,修復后合并分支,返回把臨時分支刪除。

git stash -->當前分支的任務進行到一半還不能提交,可以用此命令把當前工作現場“儲藏”,等后續恢復現場后繼續工作。此時可以在其他分支上創建臨時分支進行bug修復。修復完成后,提交合并,刪除臨時分支。

此時stash的那個分支,需要用到新的命令了

git stash list -->可以查看“儲藏”的分支,現在需要恢復一下,有兩種方法

1,git stash apply需要配合git stash drop來進行刪除stash“儲藏”的信息內容

2,git stash pop恢復的同時把stash內容也刪除

如果多次stash時,恢復時先git stash list查看,用git stash apply stash@{第幾個(從0開始計數)}feature分支開發一個新feature最好新建一個分支,如果要丟棄一個沒合并過的分支,使用git branch -D分支

多人協作克隆時git自動把本地master和遠程master對應起來,遠程倉庫默認名稱origin

git remote -->查看遠程倉庫信息

git remote -v -->顯示更詳細的信息

git push origin master -->推送master分支

多人協作的通常模式:

1,首先,可以試圖git push

origin分支名推送自己的修改

2,推送失敗,則因為遠程分支比你的本地更新,需要先git pull更新合并本地代碼

3,如果合并有沖突,解決沖突并在本地提交

4,沒有沖突或者已經解決掉后,用git

push origin分支名推送就可以成功了

如果git pull提示“no tracking information”,說明本地分支與遠程分支沒有創建鏈接,用命令git branch --set-upstream分支名origin/分支名創建鏈接(在本地創建和遠程分支對應的分支,git checkout -b分支名origin/分支名,名稱最好一致),如果有沖突要先處理沖突


標簽管理:

標簽和HEAD很像,但是不可以移動,是版本庫的一個快照,讓人更容易記住,更容易找的那個版本,標簽只存在本地,不會自動推送到遠程。

git tag標簽信息-->打標簽,默認為HEAD,也可以指定一個commit id。

git tag -->查看所有標簽信息,標簽信息不是按照時間順序,是按照字母順序的

git log --pretty=oneline --abbrev-commit -->找的歷史忘記需要打標簽但是忘記打標簽的commit id。

git tag標簽信息commit id -->對某個commit id打標簽

git show標簽信息-->查看這個標簽對應的版本信息,包括PGP簽名信息

git tag -a標簽信息-m“標簽說明”commit id --> -a指定標簽名,-m指定說明文字

git tag -s標簽信息-m“標簽說明”commit id -->可以通過-s用私鑰簽名一個標簽

簽名采用PGP簽名,所以要先安裝gpg(GnuPG),如果沒有或者沒有gpg密鑰對。會報錯,此時需要GnuPG文檔配置key。

git tag -d標簽信息-->如果標簽打錯了,可以通過這個命令刪除

git push origin標簽信息-->推送某個標簽信息到遠程

git push origin --tags -->一次性推送全部未推送到遠程的本地標簽

git push origin :refs/tags/標簽信息-->刪除一個遠程的標簽,先刪除本地標簽后,繼續這個命令,可以登錄github查看是否已經刪除

在github上如果你要修復別人的項目,點擊Fork,這是把這個項目克隆到你github的賬號下,然后繼續克隆到本地倉庫電腦上,這時你就可以干活了,完畢后推送到自己的github,如果要推送到別人的項目,你可以pull request,至于接不接受就看別人的心情而定了。

另外,git config --global color.ui true -->使git適當的顯示不同的顏色


忽略特殊文件:關于.gitignore文件,github已經準備了各種配置文件,https://github.com/github/gitignore所有配置文件可以直接在線瀏覽,當然.gitignore文件是需要放到版本庫的,并且可以對.gitignore做版本管理

忽略的原則:

1,忽略操作系統自動生成的文件,比如縮略圖

2,忽略編譯生成的中間文件、可執行文件等,也就是說如果一個文件是通過另一個文件自動生成的,那這個自動生成的文件就不用放進版本庫,比如.class

3,忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件

你要添加一個文件到git,發現添加不了,有一下兩個解決方法

git add -f文件名-->有可能是被.gitignore忽略了,可以用-f強制添加

git check-ignore -v文件名-->也有可能是.gitignore寫的有問題,需要找出寫錯的這個規則,可以用這個命令檢查

配置別名:這些命令單詞這么多真心不好記又容易寫錯,所以這時我們可以為這些命令換一個簡單的別名

git config --global alias.別名(st)命令(status)-->例如給status的別名是st,--golbal是全部參數,所以配置好就可以在這臺電腦的所以git倉庫下都有用,如果不加只對當前倉庫有效

git config --global alias. unstage 'reset HEAD'-->撤銷修改的別名,git reset HEAD文件名--> git unstage文件名

git config --global alias. last 'log -1' -->顯示最后一次提交的信息的別名配置

git config--global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset-%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'--abbrev-commit" -->這個配置出來的效果絢麗,是studio內的version control內的log的信息。

配置文件:首先配置文件是存放在.git/config文件中的。

cat .git/config -->出來的信息中[alias]的信息里是別名配置信息,要刪除別名,直接把對應的行刪掉即可

cat .gitconfig -->里面是[alias][user]的信息,配置別名可以直接修改這個文件,配置錯了,可以刪掉文件重新通過命令配置


搭建git服務器:

需要一臺Linux的機器(推薦使用Ubuntu/Debian,這樣可以幾條apt命令就可以安裝完成)

假設你已經有sudo權限的用戶賬號

1,sudo apt-get install git --》安裝git

2,sudo adduser git --》創建git用戶,用來運行git服務

3,創建證書登錄:收集所有要登錄的用戶公鑰(id_ras.pub文件),把所有公鑰導入到/home/git/.ssh/authorized_keys文件里,一行一個。

4,sudo git init --baresample.git --》初始化git倉庫,假設是/srv/sample.git,在/srv目錄下輸入這行命令,git會創建一個裸倉庫,裸倉庫是沒有工作區的,因為服務器上的git倉庫純粹是為了共享,所以不讓用戶登錄到服務器上去改工作區,并且服務器上的git倉庫通常是以.git結尾,sudo chown-R git:git sample.git --》把owner改為git

5,禁用shell登錄:安全考慮,第二步創建的git用戶不允許登錄shell,可以通過編輯/etc/passwd文件完成。git:x:1001:1001:,,,:/home/git:/bin/bash-->改為:git :x:1001:1001:,,,:/home/git:/usr/bin/git-shell,這樣git用戶可以正常通過ssh使用git,但是不能登錄shell,因為我們為git用戶指定的git-shell每次一登錄就自動退出

6,git clone git@server:/srv/sample.git --》通過命令克隆遠程倉庫,在各自電腦上運行當團隊人數很多時,公鑰就不能放在服務器的authorized_keys文件里這么玩了,此時用Ditosis來管理公鑰。

像svn那樣控制權限,用Gitolite

國外友人制作的git

cheat sheet:https://pan.baidu.com/s/1kU5OCOB#list/path=%2F(Git Cheat Sheet)

git官方網站:http://git-scm.com

本次總結來源于廖雪峰博客,網址:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

另外附贈一份練習git的小游戲:http://learngitbranching.js.org/

git命令
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容