1. 程式人生 > >Git命令 未完結

Git命令 未完結

一、在客戶機上生成公鑰和私鑰

$ ssh-keygen -t rsa -C "[email protected]"

生成的檔案存放在使用者目錄的.ssh目錄下,預設檔名為:id_rsa(私鑰),id_rsa.pub(公鑰)。

二、設定/修改名稱與郵箱:

$ git config --global user.name "yourname"
$ git config --global user.email " [email protected] "

三、檢視名稱與郵箱

$ git config user.name
$ git config user.email

四、克隆遠端庫到本地

首先在git bash中定位到建立本地庫的位置。

$ git clone git@GitHub上該倉庫的URL.git

五、假如將一個新檔案如test.txt放入Git倉庫

(1)用命令git add告訴Git將某個檔案新增到了倉庫

$ git add test.txt

(2)用命令git commit告訴Git將檔案提交到倉庫,可以一次提交多個檔案

$ git commit -m "add a new file"

-m後的內容是對git倉庫改變的描述。
執行完上述命令後,git bash中出現下面的內容:1個檔案被改變,插入了一行資料

[master f0a585d] add a new file
 1 file changed, 1 insertion(+)
 create mode 100644 readme.txt

六、git status 檢視倉庫當前的狀態,結果如下:

On branch master
Your branch is ahead of 'origin/master' by 4 commits.
  (use "git push" to publish your local commits)
Untracked files:
  (use "git add <file>..." to
include in what will be committed) readme.txt.bak test.txt.bak nothing added to commit but untracked files present (use "git add" to track)

Untracked files所列的內容是沒有被Git追蹤的內容,如果只列出所有已經被git管理的且被修改但沒提交的檔案執行

$ git status -uno

七、執行git status如果顯示某個檔案被修改,並且想檢視修改的內容

$ git diff test.txt

結果如下:

diff --git a/test.txt b/test.txt
index c920a1f..9319b8f 100644
--- a/test.txt
+++ b/test.txt
@@ -2,3 +2,4 @@ 
 test git
 github
 git
 test
+include


結果解析:
- - -代表原始檔
+++代表目標檔案
由@@開頭,@@結尾的行表示在原始檔第2行開始的3行和目標檔案第2行開始的4行構成一個差異小結
-開頭的行,是隻出現在原始檔中的行
+開頭的行,是隻出現在目標檔案中的行
空格開頭的行,是原始檔和目標檔案中都出現的行

八、把修改後的檔案提交到倉庫

$ git add test.txt
$ git commit -m "test update"

九、刪除檔案

$ rm test.txt

執行上述命令後,檢視狀態,Git會指明哪個檔案被刪除了,此時工作區和版本庫就不一樣了。

$ git status
On branch master
Your branch is ahead of 'origin/master' by 9 commits.
  (use "git push" to publish your local commits)
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    readme.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        readme.txt.bak
        test.txt.bak

no changes added to commit (use "git add" and/or "git commit -a")

兩種情況:
1.確實從版本庫中刪除該檔案,刪除之後並提交。

$ git rm test.txt
$ git commit -m "remove"

2.刪錯了,將誤刪的檔案恢復到最新版本

$ git checkout -- readme.txt

git checkout 是用版本庫中的版本替換工作區中的版本。

十、先有本地庫後有遠端庫時如何關聯遠端庫

首先在github官網上建立遠端倉庫,然後將本地倉庫和新建的遠端倉庫建立連線。
1.進入到本地倉庫後,執行一下命令則將本地倉庫和遠端倉庫連線起來。遠端庫的名字就是origin

$ git remote add origin [email protected].com:www-zhangyu/zhangyu_test.git

2.將本地庫的內容推送到遠端庫上
第一次推送:加上了 -u,git不但會將本地的master分支內容推送到遠端新的master分支,還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或拉取時簡化命令。

$ git push -u origin master

之後用git push origin master推送最新更改。

十一、建立分支

1、建立dev分支,並切換到該分支

$ git checkout -b dev

加上-b引數表示建立並切換,相當於兩條命令:

$ git branch dev
$ git checkout dev

2、檢視當前分支

$ git branch

會列出所有分支,當前分支前加“*”
3、我們可以在dev分支上正常提交而不影響其他分支,dev分支的工作完成後切換到master分支,把dev的工作成果合併到master分支。

$ git checkout master
$ git merge dev

git merge命令用於合併指定分支到當前分支

4、刪除分支

$ git branch -d dev

十二、解決衝突

如果兩個分支同時修改了同一個檔案併合併到master分支時會存在衝突,如下面程式碼顯示readme.txt檔案存在衝突,必須手動解決衝突後再提交。

$ git merge zhangyu
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

此時readme.txt檔案內容為

readme
<<<<<<< HEAD
branch master
=======

branch zhangyu
>>>>>>> zhangyu

git以<<<<<,=====,>>>>>標記處不同分支的內容,手動修改後儲存,重新提交

$ git add readme.txt
$ git commit -m "conflict fixed"

檢視分支合併圖:

$ git log --graph

十三、–no-ff方式的merge

強制禁用“Fast Forward”方式合併分支

$ git merge --no-ff -m "merge --no-ff" dev