git

教程網(wǎng)站

廖雪峰的官方網(wǎng)站
阮一峰的官方博客--git遠程操作詳解
git教程
trygit.io

Git是什么?

Git是目前世界上最先進的分布式版本控制系統(tǒng)(沒有之一)

為什么學(xué)習(xí)git

1.裝蛋(牛逼的大神們都在用),github全是綠色人真的讓我羨慕
2.解決多人協(xié)作
3.提高開發(fā)效率,避免代碼重復(fù)
4.有人推薦大學(xué)期間一定要了解markdown vim python git這幾個工具,那個作者的理由是 學(xué)生時期時間多 可以隨便折騰。。。。

git的身世

(其實我一直抵觸寫這種虛的玩意覺得沒有什么用,現(xiàn)在明白這更多是對創(chuàng)作者的一種尊敬,和精神的傳播。)

Linus在1991年創(chuàng)建了開源的Linux。

Linus在2005年,花了兩周時間自己用C寫了一個分布式版本控制系統(tǒng),這就是Git!一個月之內(nèi),Linux系統(tǒng)的源碼已經(jīng)由Git管理了!牛是怎么定義的呢?

Git迅速成為最流行的分布式版本控制系統(tǒng),尤其是2008年,GitHub網(wǎng)站上線了,它為開源項目免費提供Git存儲,無數(shù)開源項目開始遷移至GitHub,包括jQuery,PHP,Ruby等等。

現(xiàn)在的github已經(jīng)成為一個社區(qū),不光局限在軟硬件還有人使用github出書,做blog,更多移步知乎問答git有什么奇技淫巧。

git與svn cvn的區(qū)別

CVS及SVN都是集中式的版本控制系統(tǒng),而Git是分布式版本控制系統(tǒng)
svn cvn需要聯(lián)網(wǎng)
git隨時隨地,離線開發(fā),然后上傳就ok
而且git的分支管理巨強大

遠程倉庫(github)

Paste_Image.png
Paste_Image.png

github由Tom Preston-Werner、Chris Wanstrath和PJ Hyett三人在2008年聯(lián)合創(chuàng)立。從一個開發(fā)者社區(qū)變成了一個免費開源代碼托管平臺,在2011年的9月份,GitHub的用戶數(shù)就已經(jīng)突破了100萬的關(guān)卡;到了今年1月,其又迎來了第300萬的用戶。也就是說,在短短的幾個月內(nèi),該網(wǎng)站就迎來了50萬的新用戶。當(dāng)前,GitHub雇用了超過150位員工。GitHub不僅是一個分享開源創(chuàng)作并與其它程序員合作的好地方,你也可以從GitHub上收到自己作品的反饋。用戶可以提出復(fù)核、評論每一行的代碼、報告問題、甚至詢問其它用戶的想法,并嘗試將它們變成現(xiàn)實。
我個人特別敬佩github的公司,據(jù)說全公司從ceo到普通員工,不管是從事開發(fā)的工程師還是行政管理人員都特愛寫代碼,公司文化就是這樣。

我們讓協(xié)作和分享更輕松

這是github創(chuàng)立的目標(biāo),性感的目標(biāo),偉大的產(chǎn)品,相比當(dāng)下的哪些互聯(lián)網(wǎng)創(chuàng)業(yè)公司,得了。。。我還沒有資格說他們。

扯多了,,,,,這就是情懷

git安裝

linux自帶git
window直接去git官網(wǎng)下載git的.exe軟件,一直下一步/next就行
安裝完linux直接在命令行里運行就行
window下鼠標(biāo)右鍵Git Bash就出現(xiàn)下面的

Paste_Image.png

安裝完成后,還需要最后一步設(shè)置,在命令行輸入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
這里的your name 和email地址換成自己的

創(chuàng)建遠程倉庫

1.注冊github

git創(chuàng)建

先創(chuàng)建文件夾


Paste_Image.png

然后輸入$ git init 完成

Paste_Image.png

這時可以發(fā)現(xiàn)當(dāng)前目錄下多了一個.git
的目錄(有時候時不可見的 需要運行 ls -ah),不懂不要去修改里面的內(nèi)容。。修改的后果我也不知道。。大不了一死

1、創(chuàng)建一個 SSH key

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

2.在本地創(chuàng)建ssh key,

ls ~/.ssh / 打開.ssh 文件

在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果已經(jīng)有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創(chuàng)建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"

按3個回車,密碼為空。

你需要把郵件地址換成你自己的郵件地址,然后一路回車,使用默認值即可,由于這個Key也不是用于軍事目的,所以也無需設(shè)置密碼。
如果一切順利的話,可以在用戶主目錄里找到.ssh目錄,里面有id_rs和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

Paste_Image.png

3.登陸GitHub,打開“Account settings”,“SSH Keys”頁面:然后,點“Add SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內(nèi)容


Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png

代碼參數(shù)含義:
-t 指定密鑰類型,默認是 rsa ,可以省略。-C 設(shè)置注釋文字,比如郵箱。-f 指定密鑰文件存儲文件名。
以上代碼省略了 -f 參數(shù),因此,運行上面那條命令后會讓你輸入一個文件名,用于保存剛才生成的 SSH key 代碼,如:

Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]

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

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

當(dāng)然,你也可以不輸入密碼,直接按回車。那么push的時候就不需要輸入密碼,直接提交到github上了,如:

Enter passphrase (empty for no passphrase): # Enter same passphrase again:

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

Your identification has been saved in /c/Users/you/.ssh/id_rsa.
Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.
The key fingerprint is:
01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com

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

2、登陸github系統(tǒng)。點擊右上角的 Account Settings—->SSH Public keys —-> add another public keys

3、把你本地生成的密鑰復(fù)制到里面(key文本框中), 點擊 add key 就ok了


測試
可以輸入下面的命令,看看設(shè)置是否成功,git@github.com的部分不要修改:
$ ssh -T git@github.com

如果是下面的反饋:

The authenticity of host 'github.com (207.97.227.239)' can't be established.RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.Are you sure you want to continue connecting (yes/no)?

不要緊張,輸入yes就好,然后會看到:

Hi cnfeat! You've successfully authenticated, but GitHub does not provide shell access.

設(shè)置用戶信息
現(xiàn)在你已經(jīng)可以通過SSH鏈接到GitHub了,還有一些個人信息需要完善的。
Git會根據(jù)用戶的名字和郵箱來記錄提交。GitHub也是用這些信息來做權(quán)限的處理,輸入下面的代碼進行個人信息的設(shè)置,把名稱和郵箱替換成你自己的,名字必須是你的真名,而不是GitHub的昵稱。

$ git config --global user.name "cnfeat"http://用戶名
$ git config --global user.email "cnfeat@gmail.com"http://填寫自己的郵箱

SSH Key配置成功
本機已成功連接到github。
若有問題,請重新設(shè)置。常見錯誤請參考:
GitHub Help - Generating SSH Keys
GitHub Help - Error Permission denied (publickey)
填好就行了。
ssh -Tv git@github.com 測試是否完成

github上建立倉庫
登錄后系統(tǒng),在github首頁,點擊頁面右下角「New Repository」

Paste_Image.png

當(dāng)前創(chuàng)建git的文件夾里新建文件

(這里用readme.txt為例)
首先在文件夾先新建一個readme.txt的文件
(千萬不要使用Windows自帶的記事本編輯任何文本文件)

Paste_Image.png

把readme.txt添加到git倉庫

成功的話,沒有任何提示,git就是這樣不廢話,

git commit -m '提交第一個文件到git倉庫'

-m 后面是你添加的注釋,寫代碼不寫注釋,那你等著被打死吧。
上面的add是添加 commit是提交。。。。其實就是add到一個臨時的地方叫做緩存區(qū),然后等你全都確定無誤,就可以提交了。

Paste_Image.png

一些git 命令行

$ git status ---查看git狀態(tài)
$ git diff ---查看有哪些修改
$ git log ---查看日志
$ git log --pretty=oneline ---在一行顯示log
$ git log --graph 查看分支合并圖

git log實例截圖


Paste_Image.png

這里需要了解的就是commit 就版本號,唯一確定,以后想會退到那個狀態(tài),只要知道commit的前幾位就可以(基本7,8位就行 別1,2位就行)就可以

git常用功能

  1. git clone
  2. git remote
$ git remote -v
  1. git fetch
  2. git pull
  3. git push
git原理圖

移除遠程庫

有時候打錯了,,想要換一個

git remote rm origin
git remote add origin git@github.com:Liutos/foobar.git

版本回退

$git reset --hard +版本號就可以
Paste_Image.png

Git中,總是有后悔藥可以吃
如果你git reset 后悔了

$ git reset --hard HEAD^
回退到上個版本
$ git reset --hard HEAD^^
回退到上上個版本
$ git reflog
查詢版本號

這種“回退”就是在否認歷史,如果有其他人也在用你的remote,你push以后將他置于何地呢?
所以,如果僅僅你自己在使用,那么強制push,命令是 git push -f 如果是與人合作,更漂亮的做法是revert,給個例子供參考

$ git checkout -- readme.txt
Paste_Image.png

這些版本回退都是在你本地實現(xiàn)的

刪除分支

$rm readme.txt
$git rm readme.txt
$git commit -m "你愛說什么說什么 例如刪除分支"

另一種情況是刪錯了,因為版本庫里還有呢,所以可以很輕松地把誤刪的文件恢復(fù)到最新版本:

$ git checkout -- readme.txt

在github上創(chuàng)建Create a new repo

Paste_Image.png

在Repository name填入learngit
,其他保持默認設(shè)置,點擊“Create repository”按鈕,就成功地創(chuàng)建了一個新的Git倉庫:

Paste_Image.png

這里我就直接用廖雪峰大神的原圖了

添加遠程庫

$ git remote add origin git@github.com:yourgithubname/learngit.git

origin是遠程庫的意思,對應(yīng)github的repository

$ git push -u origin master

把本地庫的內(nèi)容推送到遠程,用git push命令,實際上是把當(dāng)前分支master推送到遠程。

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

推送成功后,可以立刻在GitHub頁面中看到遠程庫的內(nèi)容已經(jīng)和本地一模一樣.
從現(xiàn)在起,只要本地作了提交,就可以通過命令:

$ git push origin master

把本地master分支的最新修改推送至GitHub,現(xiàn)在,你就擁有了真正的分布式版本庫!

從github上克隆代碼

git clone git@github.com:yourgithub/gitskills.git

所以我們只要知道對方或者自己的github賬號以及項目名稱就可以在github上獲得源碼(我們也可以直接在github網(wǎng)站上用網(wǎng)頁直接圖形化操作)

github圖形化操作(我隨便找的一個項目)

分支管理

談?wù)勎覍Ψ种Ч芾淼恼J識
首先一個項目是要多人協(xié)作,就會出現(xiàn)不同組件合并,相互研究對方代碼,相同組件不同版本合并升級刪除,這些操作,就算小項目都會折磨死你。

創(chuàng)建分支(命名為dev)

$ git branch dev
  #創(chuàng)建分支
$ git checkout dev
  #切換到dev分支
#簡寫如下
$ git checkout -b dev

Fast-forward快速合并分支

$ git merge dev
  #把dev分支合并到當(dāng)前分支
  #so 你需要在合并前切換到master

這樣是最基本的合并分支,只有在dev與master在相同的部分是沒有改變得,dev只是增加了一個文件這樣不產(chǎn)生沖突的情況下才成功合并
如果存在沖突就需要解決沖突才能合并

分支沖突--by廖雪峰

通常,合并分支時,如果可能,Git會用Fast forward模式,但這種模式下,刪除分支后,會丟掉分支信息。
如果要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息。
下面我們實戰(zhàn)一下--no-ff方式的git merge:

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy. 
readme.txt | 1 + 1 file changed, 1 insertion(+)

刪除分支

$ git branch -d dev
$ git branch -D dev
#強行刪除,還沒有合并的時候想要刪除是會報錯的 需要強制刪除
分支小結(jié)

git stash

關(guān)于git stash ,。。。。廖神叼

.gitignore

遠程協(xié)助

看大神怎么說吧,我也說不清還是學(xué)學(xué)人家吧

遠程協(xié)作,以及沖突處理,協(xié)作流程

小結(jié)貼上 留給自己復(fù)習(xí) 哈哈哈哈哈

遠程協(xié)作小結(jié)

到這里git的基本操作就學(xué)習(xí)完了

還有的例如搭建私有g(shù)it服務(wù)器
自己研究吧

謝謝廖雪峰大神

雖然他看不到

代表所有想了解git的孩子們對大叔表示誠摯的問候

gitignore 后期修改無效的解決辦法
Even if you haven't tracked the files so far, git seems to be able to "know" about them even after you add them to .gitignore.

NOTE : First commit your current changes, or you will lose them.

Then run the following commands from the top folder of your git repo:

git rm -r --cached .
git add .
git commit -m "fixed untracked files"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容