git的使用

Git的使用

首先登錄https://git.oschina.net,如沒有賬號進行注冊.

Git簡單介紹

Git是一款免費,開源的分布式版本控制系統(tǒng),用于敏捷高效地處理任何或小或大得項目.

理解分支的概念:

分支像開發(fā)中的有向圖,每個開發(fā)人員都是一個分支,這樣不影響別人的開發(fā),也安全.

Git與SVN的區(qū)別

SVN是集中式版本控制系統(tǒng),版本庫值集中放在中央服務器的,而干活的時候,用的都是自己的電腦,所以首先要從中央服務器那里得到最新的版本,然后干湖,干完后,需要把自己做完的活推送到中央服務器.集中式版本控制系統(tǒng)必須聯(lián)網(wǎng)才能正常工作,如果在局域網(wǎng)還可以,寬帶夠大,速度夠快.如果在互聯(lián)網(wǎng)下,如果網(wǎng)速慢的話,就納悶了.

Git是分布式版本控制系統(tǒng),那么它就沒有中央服務器,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯(lián)網(wǎng)了,因為版本都是在自己的電腦上,既然每個人都有一個完整的版本庫,那么多個人如何協(xié)作?比如說自己在電腦上修改了文件A,其他人也在電腦上修改了文件A,這時候,你們兩個只需把各自修改的推送個對方,就可以看到對方的修改了.

常用命令

pwd顯示當前目錄的路徑

git status 本地狀態(tài)查詢

git add 提交修改文件

git commit -m "message" ? message換成你修改的信息,中英文都可以

注意: 這一點必須要寫清楚本次修改及增加的內(nèi)容

git config --global user.email ?"shenying@m14.cn" ?"換成你的郵箱"

git config --global user.name "shenying" ? "換成你的名字"

git branch 查看當前所有的分支

git branch -a 查看所有分支

拉去代碼時用git fetch + git rebase 不要用git pull

git fetch 從遠程git庫拉去代碼

git rebase origin

git push origin?

git fetch :相當于是從遠程獲取最新版本到本地,不會自動merge

git pull: 相當于是從遠程獲取最新版本并merge到本地

git pull origin master

上述命令其實相當于git fetch 和 git merge

在實際使用中,git fetch 更安全些

因為merge前,我們可以查看更新情況,然后在決定是否合并

Git 基本常用命令

Mkdir ? ? ? ? ? ? ? ? ? ?: XX(創(chuàng)建一個空目錄 XX指目錄名)

pwd ? ? ? ? ? ? ? ? ? ? ?: 顯示當前目錄的路徑

git init ? ? ? ? ? ? ? ? ? : 把當前的目錄變?yōu)榭梢怨芾淼膅it倉庫生成隱藏的.git文件

git add XX ? ? ? ? ? : 把文件添加到暫存區(qū)去.

git commit -m "XX" ? ? : 提交文件-m后面的的是注釋.

git status ? ? ? ? ? ? ? ? ? ? ?:查看倉庫狀態(tài)

git diff XX ? ? ? ? ? ? ? ? ? ? : 查看XX文件修改了哪些內(nèi)容

git log ? ? ? ? ? ? ? ? ? ? ? ? ? : 查看歷史記錄

git reset --hard HEAD^^ 或者git reset --hard HEAD~ ? ? 回退到上一個版本

git reset --hard HEAD~2 回退到第二個版本

cat XX ? ? ? ? ? ? ? ? ? ? ? ?: 查看XX文件內(nèi)容

git reflog ? ? ? ? ? ? ? ? ? ?: 查看歷史記錄的版本號id

git checkout XX ? ? ? ? :把文件在工作區(qū)的修改全部撤銷.

git rm XX ? ? ? ? ? ? ? ? ? ? : 刪除XX文件

git remote add origin https://github.com/RainbowWait/Swift_Class_3-.git 關聯(lián)一個遠程庫

git push -u (第一次使用-u,以后不需要) origin master ? ? ? ?: ?把當master分支推送到遠程庫

git clone https://github.com/RainbowWait/Swift_Class_3-.git 從遠程庫中克隆

git checkout -b dev ? ? ? ? ? ? ? : 創(chuàng)建dev分支,并切換到dev分支上

git branch ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :查看當前所有的分支

git checkout master ? ? ? ? ? ? ?:切換回master分支?

git merge dev ? ? ? ? ? ? ? ? ? ? ? ? : 在當前的分支上合并dev分支

git branch -d dev ? ? ? ? ? ? ? ? ? : 刪除dev分支

git branch name ? ? ? ? ? ? ? ? ? ? : 創(chuàng)建分支

git stash ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?: 把單錢的工作隱藏起來,等以后恢復現(xiàn)場后繼續(xù)工作

git stash list ? ? ? ? ? ? ? ? ? ? ? ? ? ?: 查看所有被隱藏的文件列表

git stash apply ? ? ? ? ? ? ? ? ? ? ? ?: 恢復被隱藏的文件,但是內(nèi)容不刪除

git stash drop ? ? ? ? ? ? ? ? ? ? ? ? : ?刪除文件

git stash pop ? ? ? ? ? ? ? ? ? ? ? ? ?: 恢復文件的同時也刪除文件

git remote ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :查看遠程庫的信息

git remote -v ? ? ? ? ? ? ? ? ? ? ? ? ?:查看遠程庫的詳細信息

git push origin master ? ? ? ? ? :Git會把master分支推送到遠程庫對應的遠程分支

git add . ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? : 提交修改的所有文件

git tag ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?: 顯示 標簽

git tag v1.4-lw ? ? ? ? ? ? ? ? ? ? ? ?: 輕量級標簽

git tag -a v1.4 -m "my version 1.4" ?:附注標簽

git tag -v v1.4.2.1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? : 驗證 標簽

git tag -a v1.2 9fceb02 ? ? ? ? ? ? ? ? ? ? : 加注標簽

git push origin v1.5 ? ? ? ??

git push origin --tags ? ? ? ? ? ? ? ? ? ? ? :分享標簽



工作區(qū),倉庫,和暫存區(qū)

什么是工作區(qū)?工作區(qū)就是我們磁盤上的一個工作目錄

什么是倉庫?就是工作區(qū)中的一個隱藏目錄.git(這個隱藏文件),這個不算是工作區(qū)部分,而是Git倉庫.

暫存區(qū)是一個文件,保存了下次將提交的文件列表信息,一般在Git倉庫目錄中.有時候也被稱作"索引",不過一般說法還是叫暫存區(qū)域.

用戶信息配置

git config --global user.name zxy

git config --global user.email 1126200379@qq.com


日志中文顯示

當我們在命令行中使用git status,git log 等輸出的時候.如果操作目錄是中文名稱,就會產(chǎn)生亂碼.可以通過配置支持中文的顯示來正常顯示中文

git config core.quotepath false

日志顏色配置

git config --global color.ui false 表示開啟 跟終端的顏色一樣

git config --global color.ui true 表示關閉 顏色為紅色


檢查配置信息

如果想要檢查你的配置,可以使用git config --list命令,來列出所有Git當前環(huán)境能夠找到的配置信息.


可能會看到重復的變量,因為Git會從不同級別的文件中讀取同一個配置.

可以通過git config <key> : 來檢查Git的某一項的最終配置

創(chuàng)建本地倉庫 ? ? ? ?git init

該命令將創(chuàng)建一個名為.git的子目錄(隱藏目錄,可以用ls -a查看,.git的目錄結構如圖),這個目錄含有初始化的Git倉庫中所有的必須文件,這些文件是Git倉庫的骨干.但是,此時我們僅僅是做了一個初始化的操作,項目的文件還沒有被跟蹤.


添加到暫存區(qū),提交到本地倉庫

這里在 test 目錄下執(zhí)行git init命令,所以該工程下的所有文件可以執(zhí)行版本操作了.可以通過git add 命令來指定文件或所有的文件添加到暫存區(qū),然后執(zhí)行git commit 提交到本地倉庫.

git add . ?

?'.'表示添加當前目錄及及其子目錄的所有修改到暫存區(qū).這種寫法在實際開發(fā)中非常實用,尤其有很多文件要提交的時候,不必 git add ?文件名 ? 這樣逐一地列出來.另一個常用的方式是,遞歸添加符合格式的文件,如 git add \*.docx,如果不帶有'\'僅是當前目錄

git commit -m "備注"

GitHub的SSH公鑰配置

1磷杏、首先需要檢查你電腦是否已經(jīng)有 SSH key

cd ~/.ssh

ls

這兩個命令就是檢查是否已經(jīng)存在 id_rsa.pub 或 id_dsa.pub 文件剑勾,如果文件已經(jīng)存在,那么你可以跳過步驟2黍少,直接進入步驟3蛋欣。如果一切順利的話,可以在用戶主目錄找到~/.ssh目錄,里面有id_rsa 和id_rsa.pub兩個文件.這兩個就是SSK Key的密鑰對,id_rsa是私鑰,不能泄露出去,id_rsa_public是公約,可以放心地告訴任何人.你需要把郵件地址換成自己的郵件地址,然后直接按Enter鍵,使用默認值即可,由于Key并不是用于機密目的,所以不用設置密碼.

2航徙、創(chuàng)建一個 SSH key

ssh-keygen -t rsa -C"your_email@example.com"

代碼參數(shù)含義:

-t 指定密鑰類型,默認是 rsa 陷虎,可以省略到踏。

-C 設置注釋文字,比如郵箱泻红。

-f 指定密鑰文件存儲文件名夭禽。

以上代碼省略了 -f 參數(shù),因此谊路,運行上面那條命令后會讓你輸入一個文件名讹躯,用于保存剛才生成的 SSH key 代碼,如:

Generatingpublic/privatersa key pair.

# Enter fileinwhich to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]

當然缠劝,你也可以不輸入文件名潮梯,使用默認文件名(推薦),那么就會生成 id_rsa 和 id_rsa.pub 兩個秘鑰文件惨恭。

接著又會提示你輸入兩次密碼(該密碼是你push文件的時候要輸入的密碼秉馏,而不是github管理者的密碼),

當然脱羡,你也可以不輸入密碼萝究,直接按回車。那么push的時候就不需要輸入密碼锉罐,直接提交到github上了帆竹,如:

Enter passphrase (emptyforno passphrase):

# Enter same passphrase again:

接下來,就會顯示如下代碼提示脓规,如:

Your identification has been savedin/c/Users/you/.ssh/id_rsa.

# Yourpublickey has been savedin/c/Users/you/.ssh/id_rsa.pub.

# The key fingerprintis:

#01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com

當你看到上面這段代碼的收栽连,那就說明,你的 SSH key 已經(jīng)創(chuàng)建成功,你只需要添加到github的SSH key上就可以了秒紧。

3绢陌、添加你的 SSH key 到 github上面去

a、首先你需要拷貝 id_rsa.pub 文件的內(nèi)容熔恢,你可以用編輯器打開文件復制脐湾,也可以用git命令復制該文件的內(nèi)容,如:

cat ~/.ssh/id_rsa.pub

b绩聘、登錄你的github賬號沥割,從又上角的設置(Account Settings)進入,然后點擊菜單欄的 SSH key 進入頁面添加 SSH key凿菩。

c机杜、點擊 Add SSH key 按鈕添加一個 SSH key 。把你復制的 SSH key 代碼粘貼到 key 所對應的輸入框中衅谷,記得 SSH key 代碼的前后不要留有空格或者回車椒拗。當然,上面的 Title 所對應的輸入框你也可以輸入一個該 SSH key 顯示在 github 上的一個別名获黔。默認的會使用你的郵件名稱蚀苛。


關聯(lián)遠程倉庫

上一步的Github的配置是基礎.截止目前,你已經(jīng)在本地倉庫創(chuàng)建了一個Git倉庫,接著需要把本地的倉庫與Github的倉庫關聯(lián).如果這兩個倉庫進行了遠程同步,Github上的倉庫就可以作為本地備份,又可以讓其他人通過該倉庫來協(xié)作,真是一舉多得.

1.創(chuàng)建一個遠程倉庫


2.在Repository name 填入 Swift_Class_3集合,其他保持默認設置,點擊Create repository按鈕,就成功地創(chuàng)建了一個新的Git倉庫.

3.目前在Github上的這個Swift_Class_3集合倉庫是空的.Github告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯(lián),把本地倉庫的內(nèi)容推送到Github倉庫.在工作區(qū)test中執(zhí)行下面的命令,注意地址要正確,地址可以在文本中復制.


git remote add origin https://github.com/RainbowWait/Swift_Class_3-.git?

git config --list //查看所有配置的結果

git push -u origin master ?//第一次使用

git push origin master //后面使用

由于遠程是空的,第一次推送master分支時,加上-u參數(shù).Git不但會把本地master分支內(nèi)容推送到遠程新的master分支上,還會把本地的maser分支和遠程的master分支關聯(lián)起來,以后的推送或者拉取時就可以使用簡化的命令:git push origin master ? ??

查看當前工作區(qū)的文件狀態(tài)

要查看哪些文件處于什么狀態(tài),可以使用git status命令.如果在克隆倉庫后立即使用此命令,會查看到類似這樣的輸出,

在master的分支上,你的分支和服務器上的分支一樣新,工作區(qū)也是干凈的.現(xiàn)在修改一下ViewController.swift文件,再次執(zhí)行git status命令,如圖


說明已跟蹤文件的內(nèi)容發(fā)生了變化,并用紅色標記了正處于修改狀態(tài),但還沒有放到暫存區(qū).要暫存這次更新,需要執(zhí)行git add命令


放到暫存區(qū)后執(zhí)行git status命令,變?yōu)榫G色狀態(tài)

然后在運行提交命令git commit ?-m "注釋內(nèi)容"


再執(zhí)行git status命令,查看結果是沒有可提價的文件

查看提交歷史

在提交了若干更新,或者克隆了某個項目之后,你也許想回顧一下提交的歷史記錄.完成這個任務最簡單而又最有效的工具是git log命令

默認不適用任何參數(shù)的話,git log會按提交的時間列出所有的更新,最近的更新排在最上面.這個命令會列出每個提交的SHA-1校驗,作者的名字,電子郵件,提交時間以及提交說明.

git log 有許多選項可以幫助你搜尋所有要找的提交,一些常用的選項如下所示:

git log -p ? ? ? ?表示按補丁格式顯示每個提交之間的差異

git log -數(shù)字 ? 表示顯示最近幾次提交

git log --stat ?表示顯示每次更新的文件修改統(tǒng)計信息

git log --shortstat 表示只顯示--stat中最后行數(shù)修改添加移除統(tǒng)計

git log --name-only 表示僅在提交信息后顯示已修改的文件清單

git log --abbrev-commit 表示僅顯示SHA-1前幾個字符,而非所有的40個字符

git log --relative-date 表示使用較短的相對時間顯示(比如,"2 week ago")

git log --graph 表示顯示ASCII圖形表示分支合并歷史

git log --pretty 表示使用其他格式顯示歷史提交信息.可用的選項包括oneline,short,full,fuller和format(后跟格式)

git log X-height 基線至非突出的小寫字母(如a,x,e等)最高點的距離

git log Cap height 基線至大寫字母最高點的距離

撤銷操作

1.修正上次的提交

有時候我們提交完了才發(fā)現(xiàn)漏掉了姐文件沒有添加,或者提交信息寫錯了,此時可以運行帶有--amend選項的提交命令,嘗試合并到上一次提交:

git commit -m "修改"

git add 文件

git commit --amend -m "打印測試日志"



最終你只會有一個提交,第二次提交將會合并到第一次提交的結果中,如圖第一次提交為修改,第二次合并了第一次,為打印測試日志

2.撤銷工作區(qū)中的文件修改

git checkout 文件名 //撤銷某個文件

git checkout . ? ? ? ? ?//撤銷修改的全部內(nèi)容


第一次我修改了AppDelegate.swif 和 ViewController.swift這兩個文件,然后我執(zhí)行git checkout .全部指令,查看狀態(tài)git status 沒有可提交的內(nèi)容,撤銷成功

第二次我修改了 ViewController.swift 這個文件,然后執(zhí)行git checkout Swift_Class_3集合/Swift_Class_3集合/ViewController.swift ?git status 查看狀態(tài),沒有可提交的內(nèi)容,撤銷成功

3.撤銷暫存區(qū)中的文件的修改

這里的操作是把暫存區(qū)的修改撤銷到工作區(qū)中,? git reset HEAD 文件名 ?(或者git reset 文件名) ? 來取消暫存.還可以按照上邊的步驟繼續(xù)從工作區(qū)中撤銷 git reset 用來撤銷最后一次的git add files


4.撤銷倉庫區(qū)

撤銷倉庫區(qū)就是git commit 后的操作撤銷到指定的版本,使用(git reset ?版本號) 指令,查看版本號使用git reflog 指令,前面變色的就是版本號


1、git reset命令后面需要加2種參數(shù):"--hard"和"--soft"玷氏,如果不加堵未,默認情況下是"--soft"。

2盏触、--soft表示該條commit號之后(時間作為參考點)的所有commit的修改都會退回到git緩沖區(qū)中渗蟹。所以使用git status命令可以在緩沖區(qū)中看到這些修改。



3赞辩、"--hard"則表示緩沖區(qū)中不會存儲這些修改雌芽,git會直接丟棄這部分內(nèi)容棚蓄,但需要注意的一個問題是:這樣的重置是直接在本地的修改曙博,無法提交到遠程服務器,如果直接丟棄的內(nèi)容已經(jīng)被推到遠程服務器上了昌犹,則會造成本地和服務器無法同步的問題糟需,即git reset --hard只能針對本地操作屉佳,不能針對遠程服務器進行同樣操作。如果從本地刪掉的內(nèi)容沒有推到服務器上洲押,則不會有副作用武花,如果被推到服務器,則下次本地和服務器進行同步時诅诱,這

部分刪掉的內(nèi)容仍然會回來髓堪。

(其實這個問題則可以很好的被git revert 命令解決送朱,使用git revert + commit號娘荡,該命令撤銷對某個commit的提交干旁,這一撤銷動作會作為一個新的修改存儲起來,這樣炮沐,當你和服務器同步時争群,就不會產(chǎn)生什么副作用。)



最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末大年,一起剝皮案震驚了整個濱河市换薄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翔试,老刑警劉巖轻要,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異垦缅,居然都是意外死亡冲泥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門壁涎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凡恍,“玉大人,你說我怎么就攤上這事怔球〗涝停” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵竟坛,是天一觀的道長闽巩。 經(jīng)常有香客問我,道長流码,這世上最難降的妖魔是什么又官? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮漫试,結果婚禮上六敬,老公的妹妹穿的比我還像新娘。我一直安慰自己驾荣,他們只是感情好外构,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著播掷,像睡著了一般审编。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上歧匈,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天垒酬,我揣著相機與錄音,去河邊找鬼。 笑死勘究,一個胖子當著我的面吹牛矮湘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播口糕,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缅阳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了景描?” 一聲冷哼從身側響起十办,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎超棺,沒想到半個月后向族,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡棠绘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年炸枣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弄唧。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡适肠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出候引,到底是詐尸還是另有隱情侯养,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布澄干,位于F島的核電站逛揩,受9級特大地震影響,放射性物質發(fā)生泄漏麸俘。R本人自食惡果不足惜辩稽,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望从媚。 院中可真熱鬧逞泄,春花似錦、人聲如沸拜效。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽紧憾。三九已至到千,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赴穗,已是汗流浹背憔四。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工膀息, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人了赵。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓履婉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親斟览。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

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

  • Git和Github學習 1.創(chuàng)建版本庫 安裝git辑奈,至于這個話題就不細說了苛茂,按照你電腦的操作系統(tǒng)下載一個合適的g...
    郭子web閱讀 372評論 0 0
  • 一、git簡介 git是目前世界上被最廣泛使用的現(xiàn)代軟件版本管理系統(tǒng)鸠窗。git本身亦是一個成熟并處于活躍開發(fā)狀態(tài)的開...
    s_在路上閱讀 3,039評論 0 10
  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git妓羊,從https:/...
    落魂灬閱讀 12,664評論 4 54
  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,661評論 9 163
  • 他 在這個城市呆了十年 從校服到正裝 從20到30 他見識過這個城市的每一寸天色 不見得這個城市能留得你 這個城市...
    秦君一閱讀 115評論 0 0