Git整理

1. 版本控制

CVS及SVN都是集中式的版本控制系統(tǒng)而Git是分布式版本控制系統(tǒng)瘪匿。

  1. 集中式版本控制系統(tǒng),版本庫是集中存放在中央服務(wù)器的,而干活的時候蛤育,用的都是自己的電腦,所以要先從中央服務(wù)器取得最新的版本葫松,然后開始干活瓦糕,干完活了,再把自己的活推送給中央服務(wù)器进宝。
  2. 分布式版本控制系統(tǒng)根本沒有“中央服務(wù)器”刻坊,每個人的電腦上都是一個完整的版本庫。分布式版本控制系統(tǒng)通常也有一臺充當(dāng)“中央服務(wù)器”的電腦党晋,方便“交換”大家的修改谭胚。

2. 安裝Git

在Mac OS X上安裝Git,有兩種安裝Git的方法徐块。

  1. 安裝homebrew,然后通過homebrew安裝Git灾而,具體方法請參考homebrew的文檔:http://brew.sh/胡控。
  2. 直接從AppStore安裝Xcode,Xcode集成了Git旁趟,不過默認沒有安裝昼激,你需要運行Xcode,選擇菜單“Xcode”->“Preferences”锡搜,在彈出窗口中找到“Downloads”橙困,選擇“Command Line Tools”,點“Install”就可以完成安裝了耕餐。安裝了 XCode 集成了 git, 就可以直接在終端使用凡傅。
  • git版本
    git --version git version 2.11.0 (Apple Git-81)

  • 配置列表:
    git config --list
    注意: 當(dāng)前路徑的git配置

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

      $git config --global user.name "your name"
      $git config --global user.email "your email"
    

    注意: git config 命令的--global 參數(shù),使用這個參數(shù)表示當(dāng)前使用的這臺機器上的 git 倉庫都會使用這個配置,當(dāng)然可以對某個參數(shù)指定不同的username 和 email。
    每個倉庫的Git配置文件都放在.git/config文件中
    cat .git/config 當(dāng)前倉庫配置
    cat .gitconfig 主目錄下 用戶配置

git config --global alias.st status 配置別名(刪除肠缔,進入配置文件刪除)
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"

3. 創(chuàng)建版本庫

版本庫又名倉庫夏跷,英文名repository,你可以簡單理解成一個目錄明未,這個目錄里 面的所有文件都可以被Git管理起來槽华,每個文件的修改、刪除趟妥,Git都能跟蹤猫态,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”披摄。

1.創(chuàng)建一個目錄 并進入到該目錄下

mkdir test
cd test

2.初始化這個目錄,變成可以管理的倉庫

git init

3.添加文件到Git倉庫懂鸵,分兩步:
第一步,使用命令git add <file>行疏,注意,可反復(fù)多次使用套像,添加多個文件酿联;
git add . ("."表示添加當(dāng)前目錄下所有的可提交的文件)
第二步,使用命令git commit夺巩,完成贞让。
git commit命令,-m后面輸入的是本次提交的說明柳譬,可以輸入任意內(nèi)容喳张,當(dāng)然最好是有意義的,這樣你就能從歷史記錄里方便地找到改動記錄美澳。
4.工作區(qū)和暫存區(qū)
工作區(qū):電腦里能看到的目錄销部,比如我的git文件夾摸航。
版本庫(Repository):工作區(qū)有一個隱藏目錄.git,這個不算工作區(qū)舅桩,而是Git的版本庫酱虎。
暫存區(qū):Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)擂涛。
git add把要提交的所有修改添加到暫存區(qū)读串。
git commit把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支。
git status命令可以讓我們時刻掌握工作區(qū)當(dāng)前的狀態(tài),告訴你有文件被修改過撒妈。
git diff可以查看工作區(qū)的修改內(nèi)容恢暖。
5.日志記錄

  • 查看提交歷史,以便確定要回退到哪個版本:
    git log命令顯示從最近到最遠的提交日志(當(dāng)前到最遠的記錄狰右,如重返過去)杰捂。
    如果輸出的信息太多,可以加上 --pretty=oneline 參數(shù)。
    顯示的 hash 值太長可以加上 --abbrev-commit 挟阻。
    需要查看歷史合并記錄 加上 --graph琼娘。
    git log --abbrev-commit --pretty=oneline --graph
  • 查看命令歷史,以便確定要回到未來的哪個版本(重返未來)
    Git提供了一個命令用來記錄你的每一次命令:git reflog

6.版本回退穿梭

Git必須知道當(dāng)前版本是哪個版本附鸽,在Git中脱拼,用HEAD表示當(dāng)前版本,上一個版本就是HEAD^, 上上一個版本就是HEAD^^,當(dāng)然往上100個版本寫100個^比較容易數(shù)不過來,所以寫成HEAD~100坷备。

Git允許我們在版本的歷史之間穿梭熄浓,使用命令git reset --hard commit_id

commit id(版本號),和SVN不一樣省撑,Git的commit id不是1赌蔑,2,3……遞增的數(shù)字竟秫,而是一個SHA1計算出來的一個非常大的數(shù)字娃惯,用十六進制表示。

7.撤銷修改

  • git checkout -- file可以丟棄工作區(qū)的修改
    一種是readme.txt自修改后還沒有被放到暫存區(qū)肥败,現(xiàn)在趾浅,撤銷修改就回到和版本庫一模一樣的狀態(tài);
    一種是readme.txt已經(jīng)添加到暫存區(qū)后馒稍,又作了修改皿哨,現(xiàn)在,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)纽谒。
  • git checkout -- file命令中的--很重要证膨,沒有--,就變成了“切換到另一個分支”的命令鼓黔,(分支管理)央勒。
  • git reset HEAD file可以把暫存區(qū)的修改撤銷掉(unstage)不见,重新放回工作區(qū)
    用命令git add告訴Git,把文件添加到倉庫:
  • 沒提交遠程之前订歪,版本回退脖祈。

4. 遠程倉庫

  • GitHub倉庫(免費托管的Git倉庫,任何人都可以看)
    1.本地Git倉庫和GitHub倉庫之間的傳輸是可以通過SSH加密的刷晋。
    2.Https
    第1步:創(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甥厦。
  • Team Foundation Server(tfs)
    本地Git倉庫和tfs倉庫之間的傳輸也是可以通過SSH加密的。
  • 自己搭Git服務(wù)器

5. 添加遠程倉庫

在本地的xxx倉庫下運行命令:
https:
git remote add origin2 https://github.com/JinXiangHuang/xxx.git
SSH密鑰對(速度最快):
git remote add origin git@github.com:JinXiangHuang/xxx.git
branch.master.remote=origin 遠程倉庫名
branch.master.merge=refs/heads/master 支線

  • 推:
    關(guān)聯(lián)后寇钉,把本地庫的內(nèi)容推送到遠程刀疙,使用命令git push -u origin master第一次推送master分支的所有內(nèi)容到遠程;

    由于遠程庫是空的扫倡,我們第一次推送master分支時谦秧,加上了-u參數(shù),Git不但會把本地的master分支內(nèi)容推送的遠程新的master分支撵溃,還會把本地的master分支和遠程的master分支關(guān)聯(lián)起來疚鲤,在以后的推送或者拉取時就可以簡化命令。

    此后缘挑,每次本地提交后集歇,只要有必要,就可以使用命令git push origin master推送最新修改语淘。

  • 拉:
    默認情況下 git pull 只會抓取遠程最新的代碼,并不會合并到當(dāng)前分支鬼悠。
    我們希望每次 git pull如果有最新的希望直接幫我們合并到當(dāng)前的分支,打開配置文件, vi .git/config 最后面添加branch "master"
    remote = origin
    merge = refs/heads/master
    也可添加其他分支,但是即使添加多個分支,git 只會幫我們合并當(dāng)前分支,其他分支需要手動合并 git merge origin/develop

  • 從遠程克隆
    git clone git@github.com: JinXiangHuang/xxx.git

示例1:先創(chuàng)建遠程庫,然后亏娜,從遠程庫克隆。
1.git clone git@github.com:JinXiangHuang/someFiles.git
2.add commit ...
3.命令git push -u origin master第一次推送master分支的所有內(nèi)容蹬挺;此后维贺,每次本地提交后,只要有必要巴帮,就可以使用命令git push origin master推送最新修改溯泣;
示例2:先有本地庫(是否有README.md)虐秋,后有遠程庫的時候,如何關(guān)聯(lián)遠程庫垃沦。

error: failed to push some refs to 'git@github.com:JinXiangHuang/someFiles.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
需要echo客给,add README.md

echo "# someFiles" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/JinXiangHuang/someFiles.git
git push -u origin master

6. 創(chuàng)建與合并分支

git checkout命令加上-b參數(shù)git checkout -b dev表示創(chuàng)建并切換,相當(dāng)于以下兩條命令:
創(chuàng)建:git branch dev
切換:git checkout dev
查看分支:git branch,列出所有分支肢簿,當(dāng)前分支前面會標一個*號
把dev分支的工作成果合并到master分支上:
合并指定分支到當(dāng)前分支:git merge dev
刪除dev分支:git branch -d dev
強行刪除:git branch -D <name>
重命名分支:git branch -m dev develop2
刪除遠程分支:git push origin --delete develop2

解決沖突:Automatic merge failed; fix conflicts and then commit the result.!!!!!
Git告訴我們,xxx文件存在沖突,必須手動解決沖突后再提交掐场。git status也可以告訴我們沖突的文件飞苇。
用<<<<<<<,=======收夸,>>>>>>>標記出不同分支的內(nèi)容
切換分支坑匠,分支提交,切換主支主支提交后卧惜,存在沖突厘灼。
當(dāng)Git無法自動合并分支時,就必須首先解決沖突咽瓷。解決沖突后设凹,再提交,合并完成忱详。
分支的合并情況:
git log --graph --pretty=oneline --abbrev-commit
git log --pretty=oneline --abbrev-commit

通常围来,合并分支時,如果可能匈睁,Git會用Fast forward模式监透,但這種模式下,刪除分支后航唆,會丟掉分支信息胀蛮。 如果要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit糯钙,這樣粪狼,從分支歷史上就可以看出分支信息。
合并分支時任岸,加上--no-ff參數(shù)就可以用普通模式合并表示禁用Fast forward再榄,合并后的歷史有分支,能看出來曾經(jīng)做過合并享潜,而fast forward合并就看不出來曾經(jīng)做過合并困鸥。

Bug分支:
修復(fù)bug時,我們會通過創(chuàng)建新的bug分支進行修復(fù)剑按,然后合并疾就,最后刪除澜术;
當(dāng)手頭工作沒有完成時,先把工作現(xiàn)場git stash一下猬腰,然后去修復(fù)bug鸟废,修復(fù)后,再git stash pop姑荷,回到工作現(xiàn)場盒延。
git stash,把當(dāng)前工作區(qū)“儲藏”起來。
git stash list多次stash厢拭,恢復(fù)的時候兰英,先用git stash list查看,然后恢復(fù)指定的stash
git stash apply恢復(fù)一恢復(fù)后供鸠,stash內(nèi)容并不刪除畦贸,你需要用git stash drop來刪除;
git stash pop恢復(fù)的同時把stash內(nèi)容也刪了.

git push origin dev git push origin xxx
master分支是主分支楞捂,因此要時刻與遠程同步薄坏;
dev分支是開發(fā)分支,團隊所有成員都需要在上面工作寨闹,所以也需要與遠程同步胶坠;
bug分支只用于在本地修復(fù)bug,就沒必要推到遠程了繁堡,除非老板要看看你每周到底修復(fù)了幾個bug沈善;
feature分支是否推到遠程,取決于你是否和你的小伙伴合作在上面開發(fā)椭蹄。

7. 標簽

git tag v2切換到需要打標簽的分支上,git tag xxx就可以打一個新標簽.默認標簽是打在最新提交的commit上的闻牡。
git tag -a v0.1 -m "version 0.1 released" 3628164創(chuàng)建帶有說明的標簽,用-a指定標簽名绳矩,-m指定說明文字罩润。
git tag查看所有標簽.
git show v2查看標簽信息。
git push origin <tagname>可以推送一個本地標簽翼馆;
git push origin --tags可以推送全部未推送過的本地標簽割以;
git tag -d <tagname>可以刪除一個本地標簽;
git push origin :refs/tags/<tagname>可以刪除一個遠程標簽应媚。

相關(guān)

顯示隱藏文件 defaults write com.apple.finder AppleShowAllFiles Yes && killall Finder
不顯示隱藏文件 defaults write com.apple.finder AppleShowAllFiles No && killall Finder
建議用命令復(fù)制ssh key,用文本軟件打開有可能出錯!
mac
pbcopy < ~/.ssh/id_rsa.pub
windows
clip < ~/.ssh/id_rsa.pub
linux
sudo apt-get install xclip
xclip -sel clip < ~/.ssh/id_rsa.pub

No such file or directory 創(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是公鑰

如何把項目托管到GitHub

在github上面建立空的倉庫(repositories)

Initialize this repository with a README 表示在初始化倉庫的時候,是否生成一個readMe文件莱找。我們在查看別人框架的時候,在框架主頁上會有對該框架版本信息嗜桌,作用使用方法等等的介紹奥溺,這個文件就是readMe文件,在這里選擇勾上骨宠。

Add .gitignore按鈕浮定,點擊之后會出現(xiàn)一個下拉框,問你是否要設(shè)置倉庫的忽略文件层亿。這個看你自己的需要桦卒,通常如果你的倉庫和代碼項目有關(guān)系,那么最好選擇相應(yīng)的忽略文件(如OC項目可以選擇Object-C,swift項目可以選擇Swift)匿又,至于為什么請參考GIT的基本使用方灾。

Add a license按鈕,點擊之后會出現(xiàn)一個下拉框碌更,需要你選擇一種開源協(xié)議裕偿,開源協(xié)議有很多種用的比較多的有MIT的或者是Apache的,不同的開源協(xié)議對項目的使用方式等有不同的規(guī)定痛单,詳情可以參考Choose an open source license嘿棘。

廖雪峰的官方網(wǎng)站
Git官網(wǎng)
Git權(quán)威指南電子版下載地址
https://git-scm.com/book/zh/v2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市旭绒,隨后出現(xiàn)的幾起案子鸟妙,更是在濱河造成了極大的恐慌,老刑警劉巖挥吵,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件重父,死亡現(xiàn)場離奇詭異,居然都是意外死亡蔫劣,警方通過查閱死者的電腦和手機坪郭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脉幢,“玉大人歪沃,你說我怎么就攤上這事∠铀桑” “怎么了沪曙?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長萎羔。 經(jīng)常有香客問我液走,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任缘眶,我火速辦了婚禮嘱根,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘巷懈。我一直安慰自己该抒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布顶燕。 她就那樣靜靜地躺著凑保,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涌攻。 梳的紋絲不亂的頭發(fā)上欧引,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音恳谎,去河邊找鬼芝此。 笑死,一個胖子當(dāng)著我的面吹牛惠爽,可吹牛的內(nèi)容都是我干的癌蓖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼婚肆,長吁一口氣:“原來是場噩夢啊……” “哼租副!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起较性,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤用僧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赞咙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體责循,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年攀操,在試婚紗的時候發(fā)現(xiàn)自己被綠了院仿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡速和,死狀恐怖歹垫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颠放,我是刑警寧澤排惨,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站碰凶,受9級特大地震影響暮芭,放射性物質(zhì)發(fā)生泄漏鹿驼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一辕宏、第九天 我趴在偏房一處隱蔽的房頂上張望畜晰。 院中可真熱鬧,春花似錦瑞筐、人聲如沸舷蟀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扫步,卻和暖如春魔策,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背河胎。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工闯袒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人游岳。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓政敢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胚迫。 傳聞我的和親對象是個殘疾皇子喷户,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

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