Git與Repo 的使用


一、Linux常用命令

pwd           用於顯示工作目錄,執行pwd指令可立刻得知您目前所在的工作目錄的絕對路徑名稱。

chmod      用來變更文件或目錄的權限。

>                表示覆蓋原文件內容(文件的日期也會自動更新)。

>>              表示追加內容(會另起一行,文件的日期也會自動更新)。

mkdir        在工作目錄下建立一個名子目錄。

curl            是利用URL規則在命令行下工作的文件傳輸工具,支持文件的上傳和下載。

histroy  查看歷史命令

 

二、Git的使用

1.  git init

初始化一個Git倉庫,即把當前目錄變成Git可管理的倉庫(repository,版本庫又名倉庫)。

 

2.  git add

把文件添加到版本庫,實際上就是把文件修改添加到暫存區(stage)。

如:$ git add readme.txt

 

3.  git commit

把文件提交到版本庫,實際上就是把暫存區的所有內容提交到當前分支(master)。

如:$ git commit -m "wrote a readme file"

-m后面輸入的是本次提交的說明,可以輸入任意內容,當然最好是有意義的,這樣你就能從歷史記錄里方便地找到改動記錄。

git commit命令執行成功后會告訴你,1 file changed:1個文件被改動(我們新添加的readme.txt文件);2 insertions:插入了兩行內容(readme.txt有兩行內容)。

 

commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

$ git add file1.txt

$ git add file2.txt file3.txt

$ git commit -m "add 3 files."

注意:如果不用git add到暫存區,那就不會加入到commit中。

 

4.  git status

查看什么文件被改過了,時刻掌握倉庫當前的狀態。

 

5.  git diff

查看修改內容。

如:$ git diff readme.txt

 

6.  git log

顯示從最近到最遠的提交日志。如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline參數:$ git log --pretty=oneline

穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本。

 

7.  git reflog

查看命令歷史。

要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。

 

8.  git reset

版本回退。

如:$ git reset --hard HEAD^

在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。

如:$ git reset --hard 1094a

1094a是版本號的前幾位。版本號沒必要寫全,前幾位就可以了,Git會自動去找。

 

9.  git checkout -- file

如:$ git checkout -- readme.txt

git checkout -- readme.txt意思就是,把readme.txt文件在工作區的修改全部撤銷,這里有兩種情況:

一種是readme.txt自修改后還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;

一種是readme.txt已經添加到暫存區后,又作了修改,現在,撤銷修改就回到添加到暫存區后的狀態。

總之,就是讓這個文件回到最近一次git commit或git add時的狀態。

git checkout其實是用版本庫里的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”。

注意:git checkout -- file命令中的--很重要,沒有--,就變成了“切換到另一個分支”的命令。

 

10.  git reset HEAD <file>

把暫存區的修改撤銷掉(unstage),重新放回工作區。git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。

 

場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。

場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD <file>,就回到了場景1,第二步按場景1操作。

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。

 

11.  git rm

從版本庫中刪除文件。git rm前,需要先手動刪除文件($ rm test.txt);git rm之后還要git commit:

提示:先手動刪除文件,然后使用git rm <file>和git add<file>效果是一樣的。

 

如果刪錯了,用git checkout(如:$ git checkout -- test.txt) 把誤刪的文件恢復到最新版本。從來沒有被添加到版本庫就被刪除的文件,是無法恢復的!

 

12.       git push

把當前分支master推送到遠程

如:git push ssh://john.ding@10.0.0.160:29418/platform/packages/apps/Music HEAD:refs/for/sprdroidq_trunk(同時推送到gerrit)

ssh://john.ding@10.0.0.160:29418/platform/packages/apps/Music為遠程庫,HEAD:refs/for/sprdroidq_trunk為當前分支master

 

問題記錄:git push報錯:missing Change-Id in commit message footer

原因:

情況一:本地剛下載的庫,第一次提交會出現這種情況。

情況二:其他提交沒有change_id,因為gerrit要求每個提交都要有change_id。

解決方法:https://www.cnblogs.com/zndxall/p/9603834.html

 

三、REPO的使用

1.  repo init -u <url> [OPTIONS]

在當前目錄下初始化repo,會在當前目錄生生成一個.repo目錄,像Git Project下的.git一樣,-u指定url,可以加參數-m指定manifest文件,默認是default.xml,.repo/manifests保存manifest文件。.repo/projects下有所有的project的數據信息,repo是一系列git project的集合,每個git project下的.git目錄中的refs等目錄都是鏈接到.repo/manifests下的。

如:repo init -u ssh://gitadmin@gitmirror.spreadtrum.com/platform/manifest.git b sprdroidq_trunk

2.  repo sync [PROJECT1...PROJECTN]

同步到最新版本庫,默認同步所有倉庫,可以指定project 。

3.  repo status

查看本地所有Project的修改,在每個修改的文件前有兩個字符,第一個字符表示暫存區的狀態。

letter

meaning

description

-

no change

same in HEAD and index

A

added

not in HEAD, in index

M

modified

in HEAD, modified in index

D

deleted

in HEAD, not in index

R

renamed

not in HEAD, path changed in index

C

copied

not in HEAD, copied from another in index

T

mode changed

same content in HEAD and index, mode changed

U

unmerged

conflict between HEAD and index; resolution required

每二個字符表示工作區的狀態 

letter

meaning

description

-

new/unknown

not in index, in work tree

m

modified

in index, in work tree, modified

d

deleted

in index, not in work tree

4.  repo manifest 

查看清單文件

5.  repo branch或repo branches

查看所有分支

6.  repo diff

查看修改

7.  repo version 

查看repo版本號

8.  repo prune <topic>

刪除已經merge的分支

9.  repo abandon <topic>

刪除分支,無論是否merged

10.  repo grep 

在項目中進行內容查找

 

三、其他

AS導包快捷鍵alt+enter


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM