http://gitbook.liuhui998.com/linux
1 touch file1 2 git init 3 echo "test1" >> file1 4 cat file1 5 git add /把文件修改添加到暫存區
6 git commit -m "test1" //把暫存區的全部內容提交到當前分支
7 git status 8 echo "test2" >> file1 9 git diff //沒add以前查看不一樣內容
10 git log --pretty=oneline //commit以後查看幾回的提交備註-提交的ID
11 git reset --hard HEAD~ //回退到上一個版本test2
12 cat file1 13 git reset --hard 3628164 //返回到test3
14 git reflog //返回將來查看版本ID 15 //增長新的內容「sjb」
16 cat file1 17 git checkout -- file1 //工做區,取消修改,尚未add
18 git reset HEAD file1 //把暫存區的修改撤銷掉,從新放回工做區 19 //git reset命令既能夠回退版本,也能夠把暫存區的修改回退到工做區
20 git checkout -- readme.txt //工做區,取消修改,尚未add
21 git reset --hard 3628164 //已經commit以後,撤銷修改,直接版本回退 22 //(場景1:當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令git checkout -- file。
23 場景2:當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操做。 24 場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節) 25 rm test //已經commit刪除文件
26 git checkout -- test //撤銷刪除文件 27 //(git checkout實際上是用版本庫裏的版本替換工做區的版本,不管工做區是修改仍是刪除,均可以「一鍵還原」。)
28 git remote add origin https://github.com/bell/testproject.git //與遠程倉庫關聯
29 git push origin master //第一次是加參數-u的,仍是要從新輸入用戶名和密碼,這個比較麻煩,怎麼避免啊??
30 git clone git@github.com:michaelliao/gitskills.git //從遠程庫克隆
1 git checkout -b dev1 //建立並切換分支
2 git branch dev1 //建立分支
3 git checkout dev1 //切換分支
4 git push origin dev1 //能夠遠程到倉庫,當前分支的名稱
5 git branch //查看當前分支
6 git checkout dev //切換到dev
7 git merge dev1 //和當前分支dev合併
8 git branch -d <name> //刪除分支
分支dev1 文件test修改git
分支featurel文件test也修改github
當合並分支的時候就會失敗提示錯誤sql
查看test內容以下:Git用<<<<<<<
,=======
,>>>>>>>
標記出不一樣分支的內容,咱們修改後保存ubuntu
打開文檔手動修改以下內容:vim
而後add-commit-而後在合併git merge feature1windows
你能夠試着輸入git
,看看系統有沒有安裝Git:緩存
sudo apt-get install git服務器
安裝的時候提示以下錯誤:Unable to locate packageapp
發現是由於新裝的ubuntu系統,沒有update的緣由。而後進行update,輸入命令:sudo apt-get update
而後在安裝Git就能夠啦
apt-get,是一條linux命令,適用於deb包管理式的操做系統,主要用於自動從互聯網的軟件倉庫中搜索、安裝、升級、卸載軟件或操做系統。
1 sudo apt-get install package 安裝包 2
3 sudo apt-get install package - - reinstall 從新安裝包 4
5 sudo apt-get -f install 修復安裝"-f = ——fix-missing"
6
7 sudo apt-get remove package 刪除包 8
9 sudo apt-get remove package - - purge 刪除包,包括刪除配置文件等 10
11 sudo apt-get update 更新源 12
13 sudo apt-get upgrade 更新已安裝的包 14
15 sudo apt-get dist-upgrade 升級系統 16
17 sudo apt-get dselect-upgrade 使用 dselect 升級 18
19 apt-cache depends package 瞭解使用依賴 20
21 apt-cache rdepends package 是查看該包被哪些包依賴 22
23 sudo apt-get build-dep package 安裝相關的編譯環境 24
25 apt-get source package 下載該包的源代碼 26
27 sudo apt-get clean && sudo apt-get autoclean 清理無用的包 28
29 sudo apt-get check 檢查是否有損壞的依賴
從 https://git-for-windows.github.io下載直接安裝
安裝完成後,在開始菜單裏找到「Git」->「Git Bash」,蹦出一個相似命令行窗口的東西,就說明Git安裝成功!
安裝完成後,還須要最後一步設置,在命令行輸入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
一、一種是從已有的Git倉庫中clone (克隆,複製);
git clone https://github.com/xxxx/gitproject
二、還有一種是新建一個倉庫,把未進行版本控制的文件進行版本控制。
git的基本流程以下:
git add
命令添加新建立或修改的文件到本地的緩存區(Index)git commit
命令提交到本地代碼庫git push
命令將本地代碼庫同步到遠端代碼庫-m
添加本次修改的註釋,完成後就會記錄一個新的項目版本。13 git status //
命令可讓咱們時刻掌握倉庫當前的狀態3、版本管理
一、修改內容
如今修改file的內容,追加test11
1 echo 「test4」 >> file3.txt
修改了內容以後,咱們須要查看此次和上次的不一樣
1 git diff file3
二、版本回退
如今個人file1文件總共作了三次修改,以下,天天都是添加了一行
test1
test11
test123
在實際工做中,咱們腦子裏怎麼可能記得一個幾千行的文件每次都改了什麼內容,否則要版本控制系統幹什麼。版本控制系統確定有某個命令能夠告訴咱們歷史記錄,在Git中,咱們用git log
命令查看:
若是嫌輸出信息太多,看得眼花繚亂的,能夠試試加上--pretty=oneline
參數
如今咱們回退到上個版本,也就是add test11;使用git reset
命令
在Git中,用HEAD
表示當前版本,也就是最新的提交3628164...882e1e0
(注意個人提交ID和你的確定不同),上一個版本就是HEAD^
,上上一個版本就是HEAD^^
,固然往上100個版本寫100個^
比較容易數不過來,因此寫成HEAD~100
。
git log --pretty=oneline //查看提交日誌,版本號
git reset --hard d9ca84997d59e //回退到這個版本號,前面幾個字符串就能夠,不用寫全
cat file1 //查看文件的內容
其實此次修改了二個文件致使用git reset --hard HEAD^這個命令的時候報錯,應該直接用版本號,以下
如今咱們在test11下面,咱們發現回退錯了,想回到test123咋辦呢?再次網上看找到版本號,回退回去(前提是咱們這個命令行窗口還木有關閉啊),又回去啦!!!!
如今,你回退到了某個版本,關掉了電腦,次日早上就後悔了,想恢復到新版本怎麼辦?找不到新版本的commit id
怎麼辦?
當你用$ git reset --hard HEAD^
回退到add distributed
版本時,再想恢復到append GPL
,就必須找到append GPL
的commit id。Git提供了一個命令git reflog
用來記錄你的每一次命令:
小結:
HEAD
指向的版本就是當前版本,所以,Git容許咱們在版本的歷史之間穿梭,使用命令git reset --hard commit_id
。
穿梭前,用git log
能夠查看提交歷史,以便肯定要回退到哪一個版本。
要重返將來,用git reflog
查看命令歷史,以便肯定要回到將來的哪一個版本。
我以爲嘛,暫存區就像購物車,沒到付款的時候你都不肯定購物車裏的東西所有都是要的。。。每拿一件商品就付一次款。。。那才麻煩大了
git diff #是工做區(work dict)和暫存區(stage)的比較
git diff --cached #是暫存區(stage)和分支(master)的比較
只有git add 放在緩存中才會提交;第一次修改 -> git add
-> 第二次修改 -> git add
-> git commit
三、撤銷修改
當已經修改了文檔時候:echo 「7891」 >> file1,尚未add
咱們用git status查看,會提示能夠撤銷修改的,git checkout ,如今返回到沒有修改的
若是已經add了,咱們用git reset HEAD file
能夠把暫存區的修改撤銷掉(unstage)---回到工做區域,而後用git checkout撤回
如今,假設你不但改錯了東西,還從暫存區提交到了版本庫,怎麼辦呢?還記得版本回退一節嗎?能夠回退到上一個版本。不過,這是有條件的,就是你尚未把本身的本地版本庫推送到遠程。還記得Git是分佈式版本控制系統嗎?咱們後面會講到遠程版本庫,一旦你把「stupid boss」提交推送到遠程版本庫,你就真的慘了……
git checkout -- file1 //file1前面剛開始沒打空格死活不能撤銷//命令中的很重要,沒有,就變成了「切換到另外一個分支」的命令git checkout -- file----
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工做區的修改所有撤銷,這裏有兩種狀況:
一種是readme.txt
自修改後尚未被放到暫存區,如今,撤銷修改就回到和版本庫如出一轍的狀態;
一種是readme.txt
已經添加到暫存區後,又做了修改,如今,撤銷修改就回到添加到暫存區後的狀態。
總之,就是讓這個文件回到最近一次git commit
或git add
時的狀態。
git checkout -- file
。git reset HEAD file
,就回到了場景1,第二步按場景1操做。
四、刪除文件
若是用rm test命令
刪掉了,而且git commit——而後git checkout test恢復
由於使用了git rm test.txt
,是同時刪除了工做區和暫存區test.txt
文件,而且將刪除的動做提交到了暫存區。git checkout -- test.txt
表示從暫存區中把test.txt
拎出來,覆蓋到工做區。可是,此時暫存區也已經沒有了test.txt
,是沒法還原覆蓋到工做區的。
正確的作法是 git checkout HEAD -- d1.txt
或 git checkout HEAD d1.txt
3、遠程倉庫
先註冊GitHub帳號。因爲你的本地Git倉庫和GitHub倉庫之間的傳輸是經過SSH加密的,因此,須要一點設置
一、建立SSH Key
打開Shell(Windows下打開Git Bash),建立SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
你須要把郵件地址換成你本身的郵件地址,而後一路回車,使用默認值便可
能夠在用戶主目錄裏找到.ssh
目錄,裏面有id_rsa
和id_rsa.pub
兩個文件,這兩個就是SSH Key的祕鑰對,id_rsa
是私鑰,不能泄露出去,id_rsa.pub
是公鑰,能夠放心地告訴任何人。
Windows的在C盤路徑下
二、登錄GitHub,打開「Account settings」,「SSH Keys」頁面:
而後,點「Add SSH Key」,填上任意Title,在Key文本框裏粘貼id_rsa.pub
文件的內容:
點「Add Key」,你就應該看到已經添加的Key
固然,GitHub容許你添加多個Key。假定你有若干電腦,你一下子在公司提交,一下子在家裏提交,只要把每臺電腦的Key都添加到GitHub,就能夠在每臺電腦上往GitHub推送了。
最後友情提示,在GitHub上免費託管的Git倉庫,任何人均可以看到喔(但只有你本身才能改)。因此,不要把敏感信息放進去。
若是你不想讓別人看到Git庫,有兩個辦法,一個是交點保護費,讓GitHub把公開的倉庫變成私有的,這樣別人就看不見了(不可讀更不可寫)。另外一個辦法是本身動手,搭一個Git服務器,由於是你本身的Git服務器,因此別人也是看不見的。這個方法咱們後面會講到的,至關簡單,公司內部開發必備。
4、添加遠程倉庫
一、首先,登錄GitHub,而後,在右上角找到「Create a new repo」按鈕,建立一個新的倉庫: 在Repository name填入(注入英文,漢字能夠輸入,可是不顯示名稱),其餘保持默認設置,點擊「Create repository」按鈕,就成功地建立了一個新的Git倉庫:
二、咱們根據GitHub的提示,在本地的learngit
倉庫下運行命令:
$ git remote add origin https://github.com/bell/testproject.git
把上面的bell
替換成你本身的GitHub帳戶名,不然,你在本地關聯的就是個人遠程庫,關聯沒有問題,可是你之後推送是推不上去的,由於你的SSH Key公鑰不在個人帳戶列表中。
添加後,遠程庫的名字就是origin
,這是Git默認的叫法,也能夠改爲別的,可是origin
這個名字一看就知道是遠程庫。
三、就能夠把本地庫的全部內容推送到遠程庫上:
git push -u origin master
因爲遠程庫是空的,咱們第一次推送master
分支時,加上了-u
參數,Git不但會把本地的master
分支內容推送的遠程新的master
分支,還會把本地的master
分支和遠程的master
分支關聯起來,在之後的推送或者拉取時就能夠簡化命令。
推送成功後,能夠馬上在GitHub頁面中看到遠程庫的內容已經和本地如出一轍:
四、從如今起,只要本地做了提交,就能夠經過命令:
$ git push origin master //第一次是加參數-u的,仍是要從新輸入用戶名和密碼,這個比較麻煩,怎麼避免啊??
5、常見錯誤和異常
若是輸入$ Git remote add origin git@github.com:djqiang(github賬號名)/gitdemo(項目名).git
提示出錯信息:fatal: remote origin already exists.
解決辦法以下:
一、先輸入$ git remote rm origin
二、再輸入$ git remote add origin git@github.com:djqiang/gitdemo.git就不會報錯了!
三、若是輸入$ git remote rm origin 仍是報錯的話,error: Could not remove config section 'remote.origin'. 咱們須要修改gitconfig文件的內容
四、找到你的github的安裝路徑,個人是C:\Users\ASUS\AppData\Local\GitHub\PortableGit_ca477551eeb4aea0e4ae9fcd3358bd96720bb5c8\etc
五、找到一個名爲gitconfig的文件,打開它把裏面的[remote "origin"]那一行
刪掉就行了!
若是輸入$ ssh -T git@github.com
出現錯誤提示:Permission denied (publickey).由於新生成的key不能加入ssh就會致使鏈接不上github。
解決辦法以下:
一、先輸入$ ssh-agent,再輸入$ ssh-add ~/.ssh/id_key,這樣就能夠了。
二、若是仍是不行的話,輸入ssh-add ~/.ssh/id_key 命令後出現報錯Could not open a connection to your authentication agent.解決方法是key用Git Gui的ssh工具生成,這樣生成的時候key就直接保存在ssh中了,不須要再ssh-add命令加入了,其它的user,token等配置都用命令行來作。
三、最好檢查一下在你複製id_rsa.pub文件的內容時有沒有產生多餘的空格或空行,有些編輯器會幫你添加這些的。
若是輸入$ git push origin master
提示出錯信息:error:failed to push som refs to .......
解決辦法以下:
一、先輸入$ git pull origin master //先把遠程服務器github上面的文件拉下來
二、再輸入$ git push origin master
三、若是出現報錯 fatal: Couldn't find remote ref master或者fatal: 'origin' does not appear to be a git repository以及fatal: Could not read from remote repository.
四、則須要從新輸入$ git remote add origingit@github.com:djqiang/gitdemo.git
git push -f origin master.強制提交
輸入中文:打開Git Bash後,對窗口右鍵->Options->Text->Locale改成zh_CN,Character set改成UTF-8
6、從遠程庫克隆
假設咱們從零開發,那麼最好的方式是先建立遠程庫,而後,從遠程庫克隆。
一、首先,登錄GitHub,建立一個新的倉庫,名字叫testproject
二、咱們勾選Initialize this repository with a README
,這樣GitHub會自動爲咱們建立一個README.md
文件。建立完畢後,能夠看到README.md
文件。
三、如今,遠程庫已經準備好了,下一步是用命令git clone
克隆一個本地庫
$ git clone git@github.com:bell/testproject.git
或是https://github.com/bell/testproject.git
Cloning into 'gitmstsc'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
$ cd testproject
$ ls
README.md
注意把Git庫的地址換成你本身的,而後進入testproject
目錄看看,已經有README.md
文件了。
要克隆一個倉庫,首先必須知道倉庫的地址,而後使用git clone
命令克隆。
Git支持多種協議,包括https
,但經過ssh
支持的原生git
協議速度最快。
7、分支管理
(媽呀 終於到分支管理了,上面的學習也花費了一些時間,這是第二次學習了。。。。。下午了,比較累)
一、建立合併分支
1 git checkout -b dev 2 Switched to a new branch 'dev'//git checkout命令加上-b參數表示建立並切換 3 git branch //列出全部分支,當前分支前面會標一個*號 4 touch branch 5 git add branch 6 git commit -m "branch test" 7 git checkout master//切換分支
8 git merge div //合併到當前分支
查看分支:git branch
建立分支:git branch <name>
切換分支:git checkout <name>
建立+切換分支:git checkout -b <name>
合併某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>