Git學(xué)習(xí)

git筆記

廖雪峰Git教程

創(chuàng)建版本庫(kù)(repository)

  1. 創(chuàng)建一個(gè)空目錄:

    $ mkdir learngit
    $ cd learngit
    $ pwd
    /Users/michael/learngit
    
  2. 通過(guò)git init 把這個(gè)目錄變成Git可以管理的倉(cāng)庫(kù):

    $ git init
    

把文件添加到版本庫(kù)

一定要放到learngit目錄下(子目錄亦可)

  1. git add 把文件添加到倉(cāng)庫(kù)

    $ git add readme.txt
    
  2. git commit 告訴Git, 把文件提交到倉(cāng)庫(kù)

    $ git commit -m "wrote a readme file" 
    

git status 可以讓我們時(shí)刻掌握倉(cāng)庫(kù)當(dāng)前的狀態(tài)

gti diff 可以看到做了什么修改

版本回退

  1. HEAD指向的版本就是當(dāng)前版本,因此,Git允許我們?cè)诎姹镜臍v史之間穿梭,使用命令git reset --hard commit_id
  2. 穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個(gè)版本。
  3. 要重返未來(lái),用git reflog查看命令歷史,以便確定要回到未來(lái)的哪個(gè)版本。

撤銷修改

git checkout -- file可以丟棄工作區(qū)的修改:

一種是readme.txt自修改后還沒(méi)有被放到暫存區(qū),現(xiàn)在,撤銷修改就回到和版本庫(kù)一模一樣的狀態(tài);

一種是readme.txt已經(jīng)添加到暫存區(qū)后,又作了修改,現(xiàn)在,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。

總之,就是讓這個(gè)文件回到最近一次git commitgit add時(shí)的狀態(tài)。

刪除文件

$ git rm test.txt

遠(yuǎn)程倉(cāng)庫(kù)

  1. 創(chuàng)建SSH Key

    $ ssh-keygen -t rsa -C "youremail@example.com"
    
  2. 登錄GitHub,打開(kāi)“Account settings”,“SSH Keys”頁(yè)面;

    然后,點(diǎn)“Add SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內(nèi)容。

添加遠(yuǎn)程庫(kù)

  1. 登陸GitHub,然后,在右上角找到“Create a new repo”按鈕,創(chuàng)建一個(gè)新的倉(cāng)庫(kù)

  2. 我們根據(jù)GitHub的提示,在本地的learngit倉(cāng)庫(kù)下運(yùn)行命令

  3. 遠(yuǎn)程庫(kù)的名字就是origin,這是Git默認(rèn)的叫法,也可以改成別的,但是origin這個(gè)名字一看就知道是遠(yuǎn)程庫(kù)

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

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

  5. 從現(xiàn)在起,只要本地作了提交,就可以通過(guò)命令

    $ git push origin master
    

從遠(yuǎn)程庫(kù)克隆

  1. 登陸GitHub,創(chuàng)建一個(gè)新的倉(cāng)庫(kù),名字叫gitskills

  2. 用命令git clone克隆一個(gè)本地庫(kù)

    $ git clone git@github.com:michaelliao/gitskills.git
    

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

  1. 創(chuàng)建dev分支,然后切換到dev分支:

    $ git checkout -b dev
    

    git checkout命令加上-b參數(shù)表示創(chuàng)建并切換,相當(dāng)于以下兩條命令:

    $ git branch dev
    $ git checkout dev
    
  2. git branch命令查看當(dāng)前分支:

    $ git branch
    
  3. dev分支的工作完成,我們就可以切換回master分支

    $ git checkout master
    
  4. dev分支的工作成果合并到master分支上

    $ git merge dev
    
  5. 刪除dev分支

    $ git branch -d dev
    

解決沖突

  • git status可以告訴我們沖突的文件

  • 直接查看沖突文件內(nèi)容,Git用<<<<<<<,=======,>>>>>>>標(biāo)記出不同分支的內(nèi)容

  • 帶參數(shù)的git log也可以看到分支的合并情況

    $ git log --graph --pretty=oneline --abbrev-commit
    

分支管理策略

Bug分支

當(dāng)手頭工作沒(méi)有完成時(shí),先把工作現(xiàn)場(chǎng)git stash一下,然后去修復(fù)bug,修復(fù)后,再git stash pop,回到工作現(xiàn)場(chǎng)。

多人協(xié)作

多人協(xié)作的工作模式通常是這樣:

  1. 首先,可以試圖用git push origin branch-name推送自己的修改;
  2. 如果推送失敗,則因?yàn)檫h(yuǎn)程分支比你的本地更新,需要先用git pull試圖合并;
  3. 如果合并有沖突,則解決沖突,并在本地提交;
  4. 沒(méi)有沖突或者解決掉沖突后,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”,則說(shuō)明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒(méi)有創(chuàng)建,用命令git branch --set-upstream branch-name origin/branch-name。

  • 查看遠(yuǎn)程庫(kù)信息,使用git remote -v
  • 本地新建的分支如果不推送到遠(yuǎn)程,對(duì)其他人就是不可見(jiàn)的;
  • 從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠(yuǎn)程的新提交;
  • 在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支,使用git checkout -b branch-name origin/branch-name,本地和遠(yuǎn)程分支的名稱最好一致;
  • 建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián),使用git branch --set-upstream branch-name origin/branch-name;
  • 從遠(yuǎn)程抓取分支,使用git pull,如果有沖突,要先處理沖突。

創(chuàng)建標(biāo)簽

  • 命令git tag用于新建一個(gè)標(biāo)簽,默認(rèn)為HEAD,也可以指定一個(gè)commit id;
  • git tag -a -m "blablabla..."可以指定標(biāo)簽信息;
  • git tag -s -m "blablabla..."可以用PGP簽名標(biāo)簽;
  • 命令git tag可以查看所有標(biāo)簽。
  • 命令git push origin可以推送一個(gè)本地標(biāo)簽;
  • 命令git push origin --tags可以推送全部未推送過(guò)的本地標(biāo)簽;
  • 命令git tag -d可以刪除一個(gè)本地標(biāo)簽;
  • 命令git push origin :refs/tags/可以刪除一個(gè)遠(yuǎn)程標(biāo)簽。

操作標(biāo)簽

  • 命令git push origin可以推送一個(gè)本地標(biāo)簽;
  • 命令git push origin --tags可以推送全部未推送過(guò)的本地標(biāo)簽;
  • 命令git tag -d可以刪除一個(gè)本地標(biāo)簽;
  • 命令git push origin :refs/tags/可以刪除一個(gè)遠(yuǎn)程標(biāo)簽。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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