git 使用積累


Git 是 Linux 之父 Linus Trovalds,為管理 Linux 內核代碼而建立的,被認為是分布式版本控制工具中的頂級水准。智能、友好、強健、高效。

HEAD代表當前的工作樹。

SHA1代表項目文件的對象名。有40位。

tag為對象標簽。

在git的概念里總共有四種對象:tree、blob、commit、tag。其關系如下圖:

一個重要的概念是:git與其他版本控制系統不一樣的是,其它管理系統如svn采用的事增量文件系統。而git則是將每一次提交的全部內容都保存下來。這雖然占用了系統空間。但是在如今這個時代,容量已不是問題。這樣做顯然可以提高速度。這也是git快捷高效的一個原因。

注:一個blob就是一個內容塊。它沒有文件名。可能多個對象指向同一個blob。

Git 工作流程

—————————-
1、使用中央服務器輔助協作;

2、每人在服務器擁有一個以自己 id 為名稱的分支;

3、各人只許推送更新到自己的分支,不允許推送到別人的分支或者 master;

4、master 由專人管理,在合適時 merge 其它分支(開發初期每日自動 merge 各人分支,生產化后則由人工 merge 經過 review 的分支);

5、代碼修改 merge 到 master 后,將同步到所有終端。

Git 常用命令

——————————

1、查看blob對象內容

$ git show SHA1-BLOB

2、查看tree對象內容

$ git ls-tree SHA1-TREE(亦可以用git show)

3、查看commit對象(配合--pretty=raw可以查看詳細的commit的內容

$ git show -s --pretty=raw SHA1-COMMIT

或$ git log -s --pretty=raw SHA1-COMMIT

4、一個標簽對象包括一個對象名(譯者注:就是SHA1簽名), 對象類型, 標簽名, 標簽創建人的名字("tagger"), 還有一

條可能包含有簽名(signature)的消息. 你可以用git cat-file 命令來查看這些信息:

  1. $ git cat-file tag v1.5.0
  2. object 437b1b20df4b356c9342dac8d38849f24ef44f27
  3. type commit
  4. tag v1.5.0
  5. tagger Junio C Hamano <junkio@cox.net> 1171411200 +0000
  6. GIT 1.5.0
  7. -----BEGIN PGP SIGNATURE-----
  8. Version: GnuPG v1.4.6 (GNU/Linux)
  9. iD8DBQBF0lGqwMbZpPMRm5oRAuRiAJ9ohBLd7s2kqjkKlq1qqC57SbnmzQCdG4ui
  10. nLE/L9aUXdWeTFPron96DLA=
  11. =2E+0
  12. -----END PGP SIGNATURE-----

5、查看索引:所謂的索引一個在你的工作目錄和項目倉庫間的暫存區(staging area). 有了它, 你可以把許多內容的修改一起提交(commit). 如果你創建了一個提交(commit), 那么提交的是當前索引(index)里的內容, 而不是工作目錄中的內容.

$ git status

該命令可以看到哪些文件被暫存了,哪些文件被修改了但沒有被暫存。哪些文件沒有沒有被跟蹤。

6、倉庫的建立:

 

  • git clone 其支持三種協議

    git clone git://url
    git clone http://url
    git clone name@ssh

  • mkdir temp
    cd temp
    git init-db 初始化自己一個倉庫。
  • 可以通過git pull來更新倉庫。
  • 使用倉庫前一定要敲入一下命令
    git config --global user.name "your name"
    git config --global user.email "your email"
7、提交:
$ git commit -a -m "your blabla"
如果有新添加的文件要被跟蹤需要敲 git add filepath 或者git add .
8、移動和重命名:
$ git mv oldfilename newfilename
9、刪除文件:
$ git rm file
10、字符串查找:
$ git grep "your word" (其相比於grep 可以實現跨分支查找)
11、比較不同的commit:
git diff commit1 commit2
如果只有一個commit則缺省與當前HEAD進行比較。
也可以比較不同commit的同一文件
git diff tag1:file tag2:file 比較一個文件在兩個tag之間的不同。

12、查看日志:

git log 選項:-p 顯示具體內容 --name-only 只顯示更改的文件名稱

13、顯示文件:

git ls-files 選項: -m 顯示修改過的

14、推送的服務器:

將自上次 push 以來的,本地歷次 commit,推送到服務器。結合我們的實際,應該這樣寫:

$ git push origin master:your-id

其中,master 是本地的分支名;your-id 填你在服務器上的 id,服務器的版本庫里會有以你的id 為名稱的分支。

15、創建顯示分支:

$ git branch mybranch [commit-SHA1,分支狀態(git show-branch 的標識),遠程分支]

$ git checkout mybranch

如此便可以得到某次commit的內容分支或者跟隨某一個遠程分支。

單獨的git branch可以用來查看分支

git branch -a可以將遠程分支也顯示出來。

git branch -d branch用以刪除已經合並的分支

git branch -D branch強制刪除分支

16、顯示提交狀態:

$ git show-branch

17、遷出文件:

恢復某個已修改的文件(撤銷未提交的修改)

$ git checkout file-name
切換到另外的分支,進行開發:$ git checkout branch-name
18、撤銷提交:
$ git revert commit-SHA1(可能會產生沖突)
19、刪除提交:
$ git reset --soft commit-SHA1(只是刪除提交信息,除此,其他東西都還在)
$ git reset --harf commit-SHA1 全部刪除
20、修改最近一個次提交:
此種情況是為了如果在提交后發現有個文件沒有添加跟蹤或者要修改注釋時可以在分別作了相應處理后敲入git commit -amend
21、STASH 先將未提交的修改暫存起來,接着清除所有改動,
使之與沒修改時一樣。若你正在開發功能 A,又需立即去開發功能 B。A 的代碼正改到一半,未認真整理,你不想立即提交。此時……請呼叫 stash ~。
它會使你所有未提交的修改瞬間不見了:$ git stash
它會使剛剛不見了的修改,瞬間又回來了:$ git stash pop
22、git send-email
可以配置gitconfig文件sendemail選項來確定發送的郵件格式。
如果不需要經過郵件服務器只是發送的本機的信箱那么就不需要配置smtp選項。而在sendemil.to上加上
接受人的系統上的名字即可git send-email可以發送生成的patch文件但是要發給本機的話一般機上commit號或者commitid即可。
 
23、其他:
  

git ls-tree HEAD file 顯示file在HEAD中的SHA1值。
git cat-file -t SHA1 顯示一個SHA1的類型。 
git cat-file type SHA1 顯示一個SHA1的內容。type是blob、tree、commit、tag之一。

patch: 
git format-patch -1 生成最后一個提交對應的patch文件。 
git am < patch 把一個patch文件加入git倉庫中。 
git am --resolved 如果有沖突,在解決沖突后執行。 
git am --skip 放棄當前git am所引入的patch。 

clean: 
git clean -dxf 用於清除未跟蹤文件。
git clean -dnf 可以顯示需要刪除的文件,但不包括被.gitignore忽略的。
git reset --hard HEAD 用於清除跟蹤文件的修改。

 

 


免責聲明!

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



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