參考學習地址:https://backlog.com/git-tutorial/cn/intro/intro4_2.html
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分支修改內容add
和commit
后,
然后切換checkout
到issue3分支修改內容add
和commit
要把issue2分支和issue3分支的修改合并到master:
-
切換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>
=========================================