Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> git筆記,git學習筆記

git筆記,git學習筆記

編輯:關於android開發

git筆記,git學習筆記


這篇有關git的博客,寫著寫著有些崩了。裡面有些碎碎念了。下次一定注意這個問題。

創建項目:

  • midir xx :創建xx文件夾
  • git init : 為當前文件夾創建代碼倉庫

提交代碼:

  • git add xx : 將文件名為xx的文件暫存起來,當commit的時候就提交到代碼倉庫
  • git commit -m "xx" : 為當前提交添加描述

檢查狀態:

  • git status : 檢查當前倉庫的狀態,即查看是否存在未提交的新文件
  • git log : 查看更改清單

單行歷史

你可以很好的控制處理 log 命令要精確顯示的內容。我喜歡 單行格式:

$ git log --pretty=oneline

你應該看到:

$ git log --pretty=oneline
1f7ec5eaa8f37c2770dae3b984c55a1531fcc9e7 Added a comment
582495ae59ca91bca156a3372a72f88f6261698b Added a default value
323e28d99a07d404c04f27eb6e415d4b8ab1d615 Using ARGV
94164160adf8faa3119b409fcfcd13d0a0eb8020 First Commit

控制顯示哪個條目

log 命令有許多選項用來選擇顯示哪個條目。玩玩下面的選 項:

$ git log --pretty=oneline --max-count=2
$ git log --pretty=oneline --since='5 minutes ago'
$ git log --pretty=oneline --until='5 minutes ago'
$ git log --pretty=oneline --author=<your name>
$ git log --pretty=oneline --all

參閱 man git-log 了解更多細節。

更加漂亮

這是我用來復查上周所做更改的命令。如果我只想看自己所 作的更改,那麼我將添加--author=jim

$ git log --all --pretty=format:'%h %cd %s (%an)' --since='7 days ago'

終極日志格式

隨著時間的推移,我發現在工作時最喜歡下列日志格式。

$ git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short'

它看起來像這樣:

$ git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
* 1f7ec5e 2013-04-13 | Added a comment (HEAD, master) [Jim Weirich]
* 582495a 2013-04-13 | Added a default value [Jim Weirich]
* 323e28d 2013-04-13 | Using ARGV [Jim Weirich]
* 9416416 2013-04-13 | First Commit [Jim Weirich]

讓我們看一下細節:

  • --pretty="..." 定義輸出的格式
  • %h 是提交 hash 的縮寫
  • %d 是提交的裝飾(如分支頭或標簽)
  • %ad 是創作日期
  • %s 是注釋
  • %an 是作者姓名
  • --graph 使用 ASCII 圖形布局顯示提交樹
  • --date=short 保留日期格式更好且更短

 

獲取舊版本:

  • git checkout <hash> :檢查日志輸出,並且找到hash對應的提交,和下面的配合,能看到這次提交的改變
  • cat 文件名 : 如 hello.rb
  • git checkout master : 返回最新的版本

為版本打標簽

  • git tag xx : 為當前版本打上標簽XX, 如 git tag v1

標記先前的版本======》通過上面的方法獲取舊版本,然後再為當前版本打標簽。

  • git tag :獲取日志中的所有標簽

去除標簽:

  • git tag -d xx : 移除標簽xx

撤銷更改:(這裡都以hello.rb文件為例)

     @處理之前確定你在master的最新提交上===》 git checkout master ; 

     @檢查狀態,確定更改的內容沒有緩存,更沒有提交,屬於撤銷本地更改===》 git status;

     @使用checkout命令檢出更改的文件,在倉庫中的版本,以hello.rb文件為例    

$ git checkout hello.rb    //這句就撤銷了本地更改,下面兩句是查看 hello.rb 的內容
$ git status
$ cat hello.rb

 

   2.撤銷緩存更改

    @檢查狀態,確定更改的內容已經緩存,但沒有提交,屬於撤銷緩存更改===》 git status;

    @清空暫存區內容===》git reset HEAD hello.rb

    @使用checkout命令檢出提交的版本(即上一次提交的內容)===》git checkout hello.rb

    3.撤銷提交的更改

    @使用創建一個提交來移除由不想 要的提交所引入的更改===》git reset HEAD

    @上面的語句將進入編輯器,你可以編輯默認的提交信息,或直接 離開它。保存並關閉文件。會看到:

$ git revert HEAD
[master f98cb24] Revert "third commit"
 1 file changed, 1 insertion(+), 3 deletions(-)

 

   @第二步就已經成功了,此時讓我們來查看提交記錄(這裡的git hist 是自己定義的命令,可以用git log 查看):

$ git hist
* f98cb24 2016-04-04 | Revert "third commit" (HEAD -> master) [mecury]
* da6b209 2016-04-04 | third commit [mecury]
* d44641b 2016-04-04 | second commit (tag: v1) [mecury]
* 46de4a5 2016-04-04 | First Commit (tag: v1-beta) [mecury]

 

重置分支:

首先,標記分支

但在我們移除提交前,讓我們使用一個標簽來標記最新的提 交以便能夠再次找到它。

$ git tag oops

重置到 Oops 前

看看上面的日志歷史,我們將知道標記為“v1”的提交是錯誤 提交之前的正確提交。讓我們重置分支到該位置。因為分支 已經標記,所以我們可以在 reset 命令中使用標簽名( 如果它沒有被標記,那麼我們只能使用哈希值)。

$ git reset --hard v1
$ git hist
$ git reset --hard v1
HEAD is now at 1f7ec5e Added a comment
$ git hist
* 1f7ec5e 2013-04-13 | Added a comment (HEAD, v1, master) [Jim Weirich]
* 582495a 2013-04-13 | Added a default value (v1-beta) [Jim Weirich]
* 323e28d 2013-04-13 | Using ARGV [Jim Weirich]
* 9416416 2013-04-13 | First Commit [Jim Weirich]

我們的 master 分支現在指到 v1 提交,並且 Oops 和 Revert Oops 提 交已經不在分支中。--hard 參數表示應當更新工作目錄以便與新的分 支頭保持一致。

什麼也沒丟

但錯誤的提交發生了什麼?結果是提交仍然在倉庫中。事實上,我們仍然 能夠引用它們。記得在本實驗開始我們使用標簽“oops”標記了還原的提交。 讓我們看看所有的提交。

$ git hist --all
$ git hist --all
* a10293f 2013-04-13 | Revert "Oops, we didn't want this commit" (oops) [Jim Weirich]
* 838742c 2013-04-13 | Oops, we didn't want this commit [Jim Weirich]
* 1f7ec5e 2013-04-13 | Added a comment (HEAD, v1, master) [Jim Weirich]
* 582495a 2013-04-13 | Added a default value (v1-beta) [Jim Weirich]
* 323e28d 2013-04-13 | Using ARGV [Jim Weirich]
* 9416416 2013-04-13 | First Commit [Jim Weirich]

在這兒我們看到錯誤的提交並沒有消失。它們仍然在倉庫中。它們只是不再 列到 master 分支中。如果我們沒有標記它們,它們依然在倉庫中,但除了 使用哈希值外沒有別的方法引用它們。未引用的提交保留在倉庫中,一直到 系統運行垃圾回收軟件時。

修正提交:

更改程序並提交

給程序添加作者注釋。

# Default is World
# Author: Jim Weirich
name = ARGV.first || "World"

puts "Hello, #{name}!"
$ git add hello.rb
$ git commit -m "Add an author comment"

唉,該有 Email 啊

在你做了提交之後,你意識到任何好的作者注釋都應該包含 Email 地址。更新 hello 程序來包含 Email。

# Default is World
# Author: Jim Weirich ([email protected])
name = ARGV.first || "World"

puts "Hello, #{name}!"

修正先前的提交

我們真的不想因為 Email 而分開提交。讓我們修正先前的提交 來包含 Email 更改。

$ git add hello.rb
$ git commit --amend -m "Add an author/email comment"
$ git add hello.rb
$ git commit --amend -m "Add an author/email comment"
[master eb30103] Add an author/email comment
 1 files changed, 2 insertions(+), 1 deletions(-)

回顧歷史

$ git hist
$ git hist
* eb30103 2013-04-13 | Add an author/email comment (HEAD, master) [Jim Weirich]
* 1f7ec5e 2013-04-13 | Added a comment (v1) [Jim Weirich]
* 582495a 2013-04-13 | Added a default value (v1-beta) [Jim Weirich]
* 323e28d 2013-04-13 | Using ARGV [Jim Weirich]
* 9416416 2013-04-13 | First Commit [Jim Weirich]

我們可以看到最初的“author”提交現在消失了,而且它已經 被“author/email”提交替換。通過重置分支到某個提交並重 新提交新的更改,你可以實現相同的效果。

 移動文件:

  •  mkdir xx  :  在當前文件夾下,創建 XX 文件
  • git mv hello.rb lib  ===>將hello.rb 文件移動到 lib 文件夾下
  • git status : 查看到以下的狀態
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        renamed:    hello.rb -> lib/hello.rb

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
  • git commit -m "xxxx" :將此次改變提交

通過使用 Git 來移動文件,我們通知了 Git 兩件事:

 

 

Git

創建分支
    git checkedou -b greet  //創建了一個名為greet的新分支

!上面語句是git branch branchname 及 git checkout branchname的簡寫(branchname:分支名)

導航分支
    git checkout master //切換到master主分支

git checkout branchname:切換到分支branchname

當有兩個或多個分支時,使用
    git hist --all //--all能顯示出來所有的分支

合並分支
    git merge master //將分支mster合並到當前分支

沖突產生於解決(坑太多,只舉個小例子)

將分支切到master,此時更改hello.rb並且提交就會產生沖突。
原因:應為master已經和greet分支合並,但現在在master又有一個新的提交還沒有合並回greet,沖突產生。

 

如果此時返回greet分支並且嘗試合並master分支後,查看hello.rb,如圖

沖突解決:在hello.rb中改正後,重新提交hello.rb

解決後:

變址vs合並
(未知的問題:在重置greet分支後,立即重置master分支出現錯誤,好像需要重新提交所有文件)

變基失敗

 

實用篇

與遠程倉庫建立聯系remote

查看所有的遠程鏈接信息

git remote -v

查看某個遠程連接的詳細信息

git remote show [remote-name]

為本地添加一個普通的遠程倉庫 git remote add pb git://github.com/paulboone/ticgit.git pb為倉庫的別名,後面為倉庫的地址

為本地添加一個origin倉庫

git remote add origin [倉庫url]

重命名遠程連接 git remote renamed [old name] [new name]

刪除遠程倉庫 git remote rm [shortname]

pull 和 fetch 的區別:

1.git fetch 相當於是從遠程獲取最新版本到本地,不會自動merge git fetch origin master

2.git pull 當於是從遠程獲取最新版本並merge到本地

git向github提交代碼

1. 創建新的版本庫
在GitHub中,一個項目對應一個版本庫,創建一個新的版本庫,就是創建一個新的項目。

在GitHub中創建一個新的版本庫後,采取先克隆,再通過推送完成GitHub版本庫的初始化。步驟如下:

1.克隆版本庫:

git clone [email protected]:mecury/HelloWorld.git //mecury是注冊時的名字,HelloWorld是新創建的版本庫</br>

2.添加README.md文件並提交(這個也可以直接在GitHub中修改)

git add REAMDE.md

3.向GitHub中推送,完成版本庫的初始化

git push origin master

2.從已有的版本庫中創建

對於要上傳的項目,首先應該建立本地的倉庫.
git init //在當前項目的根目錄下
向文件中添加README.md文件,並且提交(可以省略)
git add README.md
git commit -m"README for project"
執行推送命令
git push -u origin master
強制推送命令,將會覆蓋遠程倉庫的不同之處
git push -f origin master

 

退出git的vim編輯器:

  1.按 i ,進入insert編輯模式

  2. 編輯完成後,按 esc 鍵

  3. 輸入 :wq! ,然後回車即可刪除

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved