Git基本操做

 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

 

1、安裝

一、在Linux上安裝Git(Ubuntu)

你能夠試着輸入git,看看系統有沒有安裝Git:緩存

sudo apt-get install git服務器

安裝的時候提示以下錯誤:Unable to locate packageapp

發現是由於新裝的ubuntu系統,沒有update的緣由。而後進行update,輸入命令:sudo apt-get update

而後在安裝Git就能夠啦

apt-get,是一條linux命令,適用於deb包管理式的操做系統,主要用於自動從互聯網的軟件倉庫中搜索、安裝、升級、卸載軟件或操做系統。

apt-get命令通常須要root權限執行,因此通常跟着sudo命令。
例:sudo apt-get xxxx
 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 檢查是否有損壞的依賴

二、在Windows上安裝Git

從 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"

2、得到一個Git倉庫

一、一種是從已有的Git倉庫中clone (克隆,複製);

 git clone https://github.com/xxxx/gitproject

 

二、還有一種是新建一個倉庫,把未進行版本控制的文件進行版本控制。

  

三、正常的工做流程

git的基本流程以下:

  • 建立或修改文件

  • 使用git add命令添加新建立或修改的文件到本地的緩存區(Index)

  • 使用git commit命令提交到本地代碼庫

  • (可選,有的時候並無能夠同步的遠端代碼庫)使用git push命令將本地代碼庫同步到遠端代碼庫

1 cd F:\git_doc

2 mkdir testproject //新建一個目錄

3 cd testproject //打開這個項目

4 git init //初始化

5 ls -la //發如今此目錄下存在.git的目錄,意味着一個倉庫初始化了

6 touch file1.txt file2.txt file3.txt //建立三個文件

7 vim file1.txt //寫入內容

8 或是追加echo 「test1」 >> file1.txt //直接追加內容(三個文件都寫入)

9 git add file1.txt file2 file3 //用git add命令把文件添加到緩存區

10 git commit -m 「add 3 files」//把暫存區的全部內容提交到當前分支使用-m添加本次修改的註釋,完成後就會記錄一個新的項目版本。

11 git remote add origin git@github.com:defnngj/MyGit.git  //鏈接到遠程GitHub項目

12 git push origin master //將本地倉庫同步到遠端服務器,輸入用戶名和密碼

13 git status            //命令可讓咱們時刻掌握倉庫當前的狀態

    add的時候在win下提示「warning: CRLF will be replaced by LF in GeneSmartStay/res/values-zh-rTW/strings.xml.The file will have its original line endings in your working directory.」這是由於:文件中換行符的差異致使的。這個提示的意思是說:會把windows格式(CRLF)轉換成Unix格式(LF),這些是轉換文件格式的警告,不影響使用。

3、版本管理

一、修改內容

如今修改file的內容,追加test11

1 echo 「test4」 >> file3.txt 

修改了內容以後,咱們須要查看此次和上次的不一樣

1 git diff file3

而後依舊是git add 和git commit

二、版本回退

如今個人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 commitgit add時的狀態。

 

小結

  • 場景1:當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令git checkout -- file
  • 場景2:當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操做。
  • 場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。

 

四、刪除文件

若是用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.txtgit 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_rsaid_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>

相關文章
相關標籤/搜索