Git 常用命令行

參考學習地址:https://backlog.com/git-tutorial/cn/intro/intro4_2.html

git本地存儲結構

1.新建git本地數據庫

按照以下步驟把新創建的tutorial目錄設置到Git數據庫。

$ mkdir tutorial   //創建tutorial文件夾
$ cd tutorial        //進入文件夾
$ git init              //初始化git數據庫

=========================================

2.查看工作樹和索引狀態
$ git status

=========================================

3.將改動文件(包括增刪改等操作)添加到索引中

將文件加入到索引,就可以追蹤它的變更了。使用add命令。在<file>指定加入索引的文件。用空格分割可以指定多個文件。

$ git add <file> <file> ...

如果要把所有改動的文件都加入到索引中,則可以使用:

$ git add .

=========================================

4.將索引區文件提交到本地數據庫中
$ git commit -m "描述內容"

注解一般格式為:

第1行:提交修改內容的摘要
第2行:空行
第3行以后:修改的理由

提交完之后可以使用$ git status確認狀態

5.查看本地數據庫提交狀態
$ git log

=========================================

6.給遠程數據庫起別名,一般為origin

我們可以給遠程數據庫取一個別名。這樣,下次推送的時候就不需要輸入長串的遠程數據庫地址了。在這個教程里,我們的遠程數據庫命名為“origin”。

請使用remote指令添加遠程數據庫。在<name>處輸入遠程數據庫名稱,在<url>處指定遠程數據庫的URL。

$ git remote add <name> <url>

執行推送或者拉取的時候,如果省略了遠程數據庫的名稱,則默認使用名為”origin“的遠程數據庫。因此一般都會把遠程數據庫命名為origin。

=========================================

7.將本地創建的數據庫推送到遠程

我們首先在本地創建了一個數據庫,然后在github上創建了一個遠程倉庫,現在要把本地的數據庫內容推送到github上這個遠程倉庫中:
使用push命令向數據庫推送更改內容。<repository>處輸入目標地址,<refspec>處指定推送的分支。

$ git push <repository> <refspec>

當執行命令時,如果您指定了-u選項,那么下一次推送時就可以省略分支名稱了。但是,首次運行指令向空的遠程數據庫推送時,必須指定遠程數據庫名稱和分支名稱。

$ git push -u origin master

=========================================

8.將遠程倉庫克隆到本地

使用clone指令可以復制數據庫,在<repository>指定遠程數據庫的URL,
在<directory>指定新目錄的名稱。

$ git clone <repository> <directory>

比如:

$ git clone https://nulab.backlog.jp/git/BLG/tutorial.git tutorial2

=========================================

9.在克隆的本地數據庫推送數據

當在克隆的數據庫目錄執行推送時,您可以省略數據庫和分支名稱。

$ git push

=========================================

10.將遠程數據庫內容拉到本地

使用pull指令進行拉取操作。省略數據庫名稱的話,會在名為origin的數據庫進行pull。

$ git pull <repository> <refspec>

例如:

$ git pull origin master

拉取完成后,我們使用log指令來確認歷史記錄是否已更新

=========================================

11.解決沖突

如果執行push的時候提示報錯:

To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

則說明我們修改并要push的文件,在遠程倉庫已經有了新的修改
首先我們需要拉取到遠程的最新修改:

$ git pull <repository> <refspec>   //比如$ git pull origin master

這時候終端會顯示出沖突文件:

CONFLICT (content): Merge conflict in sample.txt

找到目標文件修改沖突后,文件的內容發生了修改,所以需要進行提交:

$ git add sample.txt
$ git commit -m "合并"

這樣就完成了從遠程數據庫導入最新的修改內容。
我們可以用log命令來確認數據庫的歷史記錄是否準確。指定--graph選項,能以文本形式顯示更新記錄的流程圖。指定--oneline選項,能在一行中顯示提交的信息。

$ git log --graph --oneline

確認無誤后,就可以執行push操作提交到遠程了。

=========================================

12.建立分支

創建名為issue1的分支。 可以通過branch命令來創建分支。

$ git branch <branchname> // $ git branch issue1
創建名為issue1的分支。

不指定參數直接執行branch命令的話,可以顯示分支列表。 前面有*的就是現在的分支。

$ git branch
  issue1
* master

=========================================

13.切換分支

若要在新建的issue1分支進行修改提交,需要切換到issue1分支。
要執行checkout命令以切換到目標分支。

$ git checkout <branch>    //$ git checkout issue1
切換到issue1分支。

注意創建并切換分支:
在checkout命令指定 -b選項執行,可以創建分支并進行切換。

$ git checkout -b <branch>

=========================================

14.merge合并分支 fast-forward

執行merge命令以合并分支。

$ git merge <commit> //該命令將指定分支導入到HEAD指定的分支。

先切換master分支:

$ git checkout master
Switched to branch 'master'

然后把issue1分支導入到master分支:

$ git merge issue1

master分支指向的提交移動到和issue1同樣的位置。這個是fast-forward(快進)合并。

=========================================

15.解決合并沖突

首先創建issue2分支和issue3分支,并切換checkout到issue2分支修改內容addcommit后,
然后切換checkout到issue3分支修改內容addcommit

要把issue2分支和issue3分支的修改合并到master:

  1. 切換master分支后,與issue2分支合并,執行fast-forward(快進)合并。


    快進合并
$ git checkout master
Switched to branch 'master'
$ git merge issue2

2.接著合并issue3分支:

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

自動合并失敗。由于在同一行進行了修改。修改沖突的部分,重新提交。

$ git add myfile.txt
$ git commit -m "合并issue3分支"
非快進合并

歷史記錄如圖所示。因為在這次合并中修改了沖突部分,所以會重新創建合并修改的提交記錄。這樣,master的HEAD就移動到這里了。這種合并不是fast-forward合并,而是non fast-forward合并。

=========================================

16.rebase合并分支

合并上述15條中的issue3分支的時候,使用rebase可以使提交的歷史記錄顯得更簡潔。
切換到issue3分支后,對master執行rebase。

$ git checkout issue3
Switched to branch 'issue3'
$ git rebase master

此時終端沖突報錯,和merge時的操作相同,修改沖突提交

$ git add myfile.txt
$ git rebase --continue

狀態如下:


rebase的時候,修改沖突后的提交不是使用commit命令,而是執行rebase命令指定 --continue選項。若要取消rebase,指定--abort選項。
這樣,在master分支的issue3分支就可以fast-forward合并了。切換到master分支后執行合并:

$ git checkout master
Switched to branch 'master'
$ git merge issue3
Updating 8f7aa27..96a0ff0
Fast-forward

此時狀態如下:


=========================================

17.刪除分支

在branch命令指定-d選項執行,以刪除分支。

$ git branch -d <branchname>  // $ git branch -d issue1
執行以下的命令以刪除issue1分支。

issue1分支被刪除了。您可以用branch命令來確認分支是否已被刪除。

$ git branch
* master

=========================================

18.添加輕標簽tag

使用tag命令來添加標簽,在<tagname>執行標簽的名稱:

$ git tag <tagname>  // $ git tag apple
在HEAD指向的提交里添加名為apple的標簽,請執行以下的命令。

如果沒有使用參數而執行tag,可以顯示標簽列表:

$ git tag

如果在log命令添加 --decorate選項執行,可以顯示包含標簽資料的歷史記錄:

$ git log --decorate
commit e7978c94d2104e3e0e6e4a5b4a8467b1d2a2ba19 (HEAD, tag: apple, master)
Author: yourname <yourname@yourmail.com>
Date:   Wed Jul 18 16:43:27 2012 +0900

    first commit

=========================================

19.給輕標簽tag添加注解

若要添加注解標簽,可以使用-m:

$  git tag -m "add bundle" 1.0.1
在HEAD指向的提交里添加名為banana的標簽。

也可以指定-m選項來添加注解:

 git tag -a tagname -m "comments"   //本地創建

如果在tag命令指定-n選項執行,可以顯示標簽的列表和注解:

$ git tag -n
apple           first commit
banana          連猴子都懂的Git

提交tag到遠程:

git push origin tagname //提交單個標簽
git push origin --tags      //提交所有標簽

=========================================

20.刪除標簽

若要刪除標簽,在tag命令指定 -d選項執行。

$ git tag -d <tagname>

=========================================

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容