Git 整理筆記

一 Git. 的安裝

安裝了 XCode 集成了 git, 所以直接在終端使用

$ git --version
git version 2.4.9 (Apple Git-60)

安裝完成之后需要在終端中配置一下

$git config --global user.name "your name"
$git config --global user.email "your email"```
> 注意: git config 命令的--global 參數(shù),使用這個參數(shù)表示當前使用的這臺機器上的 git 倉庫都會使用這個配置,當然可以對某個參數(shù)指定不同的username 和 email

#二. 創(chuàng)建版本庫
版本庫:(respository),可以理解為一個目錄,在這個目錄下得所有文件都被 git 管理起來,所有的增刪改查都會被 git 記錄下來, 便于任何時候都可以追蹤歷史,或者還原
- 1.創(chuàng)建一個目錄 并進入到該目錄下
``` shell
$mkdir test
$cd test/
  • 2.初始化這個目錄,變成可以管理的倉庫
$git init
Initialized empty Git repository in /Users/Chris/work/test/.git/
  • 3.在當前目錄下會多一個 .git 目錄,默認是隱藏目錄
$ls -ah //命令可以查看
  • 4.添加文件到倉庫中,例如添加了一個 readme.text 文件到當前目錄下,然后加到 git緩存區(qū)$git add readme.text 或者 $git add . ("."表示添加當前目錄下所有的可提交的文件);
$git add .
$git commit -m "add readme.text"

三. 版本回退

  • 1.如果需要查看工作區(qū)的狀態(tài),可以使用
$git status 命令查看
  • 2.如果 $git status 提示有文件被修改,可以使用 $git diff 查看修改的內(nèi)容
$git diff
  • 3.$git log 命令可以顯示最近到最遠的提交日志,如果輸出的信息太多,可以加上 --pretty=oneline 參數(shù), 顯示的 hash 值太長可以加上 --abbrev-commit 需要查看歷史合并記錄 加上 --graph
$git log --abbrev-commit --pretty=oneline --graph
  • 4.根據(jù)看到的一大串數(shù)據(jù),既是對應每個提交點的 commit id 可以回退到任意點
$git reset --hard 123456(commit id)//可以不用整串都輸進來
$git reset --hard HEAD //表示撤銷當前緩存中的修改內(nèi)容
$git reset --hard HEAD^ //表示退到上一個提交點 HEAD^^以此類推
$git reset --hard HEAD~100 //回到100個提交點
  • 5.需要重返未來的提交點,可以使用 reflog 查看命令歷史,以便確定要回到未來的哪個版本上
$git reflog

四. 工作區(qū)和暫存區(qū)

  • 工作區(qū): 就是我們能看到的目錄,如 test 文件夾就是一個工作區(qū)
  • 版本庫: 工作區(qū)中有個.git 文件夾,這個不是工作區(qū),而是 git 的版本庫
    git的版本庫有很多東西,最重要的就是稱為 stage 或者叫 index 得暫存區(qū),還有 git 為我們創(chuàng)建的第一個分支 master, 以及指向 master 的一個指針叫做 HEAD,我們已經(jīng)知道把一個文件添加到 git 版本庫分為兩個步驟:
    1.把文件添加進去,實際上就是把修改的文件添加到暫存區(qū)
$git add .

2.提交修改,實際上就是把暫存區(qū)的所有內(nèi)容提交到當前分支

$git commit -m "add message"

簡單的理解為:需要提交的文件修改統(tǒng)統(tǒng)放到暫存區(qū),然后一次性提交所有暫存區(qū)的所有修改,如果文件沒有 add 到暫存區(qū)中,那么就不會加入到 commit 中

五. 撤銷修改

丟棄工作區(qū)的修改

$git checkout -- readme.txt 

意思就是把 readme.txt 文件所在工作區(qū)的修改撤銷,這里有兩種情況:

  • 1.readme.txt 自修改后還沒有放到暫存區(qū),那么撤銷修改就回到和當前版本庫一樣的狀態(tài)
  • 2.readme.text 已經(jīng)添加到暫存區(qū),又做了修改,那么現(xiàn)在撤銷修改就回到暫存區(qū)后的狀態(tài)
  • 總之,就是讓這個文件回到最近一次 git commit 或者 git add 時的狀態(tài),$ git reset HEAD file 可以把暫存區(qū)的修改撤銷掉(unstage)重新放回到工作區(qū)
$ git reset HEAD readme.txt

六. 刪除文件

當我們使用 $rm 命令刪除掉工作區(qū)中的一個文件,這個時候 git 就知道你刪除了文件,那么工作區(qū)和版本庫的文件就不一致了,$git status 可以查看那些文件被刪除掉了,那么解決的辦法有兩個:

  • 1.如果確定是要沖版本庫中刪除該文件,那么使用
$git rm filename //filename:刪掉的文件 
$git commit
  • 2.如果是刪除了,因為版本庫里還有,所以可以把誤刪的文件恢復到最新提交的狀態(tài)
$git checkout -- filename

git checkout 其實使用版本庫里面的版本替換工作區(qū)的版本,無論工作區(qū)是被修改還是刪除,都可以一鍵還原回來,但是要小心的是,只能恢復到文件最新的版本,你會丟失最近一次提交后所修改的內(nèi)容

七. 遠程倉庫

我們直接使用 github 作為遠程倉庫來實現(xiàn)

  • 1.首先你需要有一個 github 賬號我們使用 ssh 方式 來實現(xiàn)本地git 和遠程 github同步,也可以使用 https 來實現(xiàn),這里我們通過 SSH加密,所以需要提前設(shè)置,創(chuàng)建 SSH KEY, 首先在你的用戶目錄下看是否有.ssh 目錄,如果有的話再進去看看是否有 id_rsa 和 id_rsa.pub 兩個文件($ls -ah ~/),如果有的話直接到下一步,如果沒有的話,打開終端開始創(chuàng)建 SSH KEY:
$ssh-keygen -t rsa -C "youremail@example.com"

然后一路回車,默認即可,如果順利的話可以在用戶的主目錄下找到.ssh 目錄,里面有 id_rsa 和id_rsa.pub 兩個文件,這就是 ssh key 的密鑰對, id_rsa 是私鑰不能泄露, id_rsa.pub是公鑰

  • 2.登陸 Github 打開 account settings->SSH Key->add SSH Key,添加上 id_rsa.pub 文件里面的內(nèi)容

注意:在 github上提交的所有內(nèi)容任何人都是可以看到的,如果不想讓別人看到的 git 庫, 有兩個辦法, 在 github 上交保護費,把倉庫私有,另一個辦法就是搭建自己的 git 服務器,再或者是 git osc 上可以建立免費得私有倉庫

八. 添加遠程

倉庫前面我們已經(jīng)建好了本地 git 倉庫, 接下來我們就將代碼提交到 github上,并且想保持兩個倉庫同步

  • 1.首先在 github 上建立一個新的倉庫,最好與本地保持一致的倉庫名稱
  • 2.關(guān)聯(lián)本地倉庫到遠程倉庫
$git remote add origin git@github.com:chrislian/test.git

添加以后遠程庫的名字就是 origin, 也可以改成其他的

  • 3.我們在遠程倉庫建立了一個與本地倉庫同名的,通常還會設(shè)置一些 README.md,LICENSE,gitignore 等文件,因此我們需要將這些文件合并到本地倉庫中
$git pull
  • 4.默認情況下 git pull 只會抓取遠程最新的代碼,并不會合并到當前分支
  • 5.我們希望每次 git pull如果有最新的希望直接幫我們合并到當前的分支,打開配置文件, vi .git/config 最后面添加
[branch "master"]
      remote = origin
      merge = refs/heads/master

也可添加其他分支,但是即使添加多個分支,git 只會幫我們合并當前分支,其他分支需要手動合并

$git merge origin/develop
  • 6.把本地分支推倒遠程分支
$git push origin master

九. 從遠程克隆

$git clone git@github.com:chrislian/test.git

Github 上給出的地址不止一個,還可以用 https

$git clone https://github.com/chrislian/test.git

注意:實際上 git 支持多種協(xié)議,使用 https 除了速度會慢意外,還有個最大的麻煩是每次需要輸入密碼,但是在某些只開放 http 端口的公司內(nèi)部就無法使用 ssh 協(xié)議,只能使用 https

十. 分支管理

git 的分支是與眾不同的,無論是創(chuàng)建,切換,刪除,都可以在1秒之內(nèi)完成,不論你的版本是一個文件還是上萬個文件

  • 1.查看所有分支:
$git branch -a
  • 2.創(chuàng)建分支:
$git branch develop
  • 3.切換分支:
$git checkout develop
  • 4.創(chuàng)建+切換分支:
$git checkout -b develop
  • 5.合并某分支到當前分支:
$git merge master
  • 6.刪除分支:
$git branch -D develop
  • 7.重命名分支:
$git branch -m develop develop2
  • 8.刪除遠程分支:
$git push origin --delete develop

當 git 無法完成自動合并分支的時候,就必須手動解決沖突再提交,合并分支后查看合并日志使用 $git log --graph 命令查看分支的合并圖,通常查看日志的時候,個人喜歡喜歡這樣:

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

當你接到一個代號為101的bug任務時撰筷,很自然的由驹,你想創(chuàng)建一個分支 "issue-101"來修復他匠楚,但是你當前在"dev"分支上并且修改的還未提交逛钻。這個時候就可以用 "stash"功能锦亦,把當前的工作現(xiàn)場儲藏起來马绝,等以后恢復現(xiàn)場繼續(xù)工作。在解決問題以后 切換回來 "dev" 分之后以束凑,用 $git stash list命令看看

$git stash liststash@{0}:WIP on dev :23523456 add message

Git已經(jīng)把內(nèi)容存在某一個地方了晒旅,但是需要恢復一下,有兩個辦法

  • 1.使用 apply 來恢復,但是恢復以后 stash 內(nèi)容并不是刪除汪诉,你需要用 drop 刪除
$git stash apply stash@{0} //恢復$git stash drop stash@{0} //刪除
  • 2.另一種就是使用
$git stash pop //恢復的同時把stash 也刪除了敢朱。

丟棄一個沒有被合并過得分支 可以用過 branch -D來強制刪除

$git branch -D develop

十一. 多人協(xié)作

  • 當你從遠程倉庫克隆的時候,已經(jīng)把本地的master 分支和遠程的master 分支對應起來了摩瞎,并且倉庫的默認名稱是origin拴签。要查看遠程庫的信息,使用 remote 命令或者 remote -a
$git remote 
$git remote -v //顯示更詳細的信息
  • 當你的同伴從遠程庫clone 時,默認情況下同伴只能看到master分支旗们。那么你的同伴需要在dev 分支上開發(fā)蚓哩,就必須創(chuàng)建遠程的 origin 的dev 分支到本地分支
$git checkout -b dev origin/dev
  • 這樣就可以時不時的 把dev分支push 到遠程上,而碰巧你也同樣做了修改上渴,并試圖推送這個時候會提示推送失敗岸梨,那么需要用 $git pull 把罪行的提交從 origin/dev 抓下來,在本地合并解決沖突在推送稠氮。
  • 如果 $git pull 也失敗了曹阔,原因是因為沒有指定本地 dev分支到遠程的 origin/dev分支,根據(jù)提示設(shè)置 dev 和 origin/dev的鏈接
$git branch --set-upstream dev origin/dev 
$git pull

十二. 標簽管理

  • 1.打上標簽
$git tag V0.001 
  • 2.在歷史提交中打上標簽可以使用
$git tag V0.002 commit_id
  • 3.查看標簽
$git tag 
  • 4.刪除一個標簽
$git tag -d V0.001
  • 5.如果沒有推送到遠程,打錯的標簽可以在本地安全的刪除,如果要覆蓋某個V0.001標簽
$git tag -f V0.001
  • 6.推送所有未推送的本地標簽
$git push origin --tags
  • 7.刪除本地標簽:
$git tag -d V0.002
  • 8.刪除遠程標簽:
$git push origin :refs/tags/V0.002
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末隔披,一起剝皮案震驚了整個濱河市赃份,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奢米,老刑警劉巖抓韩,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鬓长,居然都是意外死亡谒拴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門涉波,熙熙樓的掌柜王于貴愁眉苦臉地迎上來英上,“玉大人炭序,你說我怎么就攤上這事〔匀眨” “怎么了少态?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長易遣。 經(jīng)常有香客問我,道長嫌佑,這世上最難降的妖魔是什么豆茫? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮屋摇,結(jié)果婚禮上揩魂,老公的妹妹穿的比我還像新娘。我一直安慰自己炮温,他們只是感情好火脉,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著柒啤,像睡著了一般倦挂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上担巩,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天方援,我揣著相機與錄音,去河邊找鬼涛癌。 笑死犯戏,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的拳话。 我是一名探鬼主播先匪,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弃衍!你這毒婦竟也來了呀非?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤镜盯,失蹤者是張志新(化名)和其女友劉穎姜钳,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體形耗,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡哥桥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了激涤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拟糕。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡判呕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出送滞,到底是詐尸還是另有隱情侠草,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布犁嗅,位于F島的核電站边涕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏褂微。R本人自食惡果不足惜功蜓,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宠蚂。 院中可真熱鬧式撼,春花似錦、人聲如沸求厕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呀癣。三九已至美浦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間项栏,已是汗流浹背抵代。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留忘嫉,地道東北人荤牍。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像庆冕,于是被迫代替她去往敵國和親康吵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,632評論 9 163
  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,456評論 1 26
  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git访递,從https:/...
    落魂灬閱讀 12,649評論 4 54
  • 在此之前只思考過墓志銘該怎么寫晦嵌,但并沒有輸出,今天先思考葬禮拷姿。 如果可以惭载,希望自己能健康平安長壽,能以生命自然結(jié)束...
    大柒柒不是小七七閱讀 219評論 0 0
  • 前幾天响巢,又接到了好久以前一位相親男的電話描滔。 總是執(zhí)著的認為,人和人合適與否最初的了解途徑就是通過交談踪古。...
    小霏鈴子閱讀 438評論 0 1