參考學(xué)習(xí)地址:https://backlog.com/git-tutorial/cn/intro/intro4_2.html
1.新建git本地數(shù)據(jù)庫
按照以下步驟把新創(chuàng)建的tutorial目錄設(shè)置到Git數(shù)據(jù)庫。
$ mkdir tutorial //創(chuàng)建tutorial文件夾
$ cd tutorial //進(jìn)入文件夾
$ git init //初始化git數(shù)據(jù)庫
=========================================
2.查看工作樹和索引狀態(tài)
$ git status
=========================================
3.將改動文件(包括增刪改等操作)添加到索引中
將文件加入到索引发魄,就可以追蹤它的變更了洋闽。使用add命令踢俄。在<file>指定加入索引的文件故响。用空格
分割可以指定多個文件。
$ git add <file> <file> ...
如果要把所有改動的文件都加入到索引中遣臼,則可以使用:
$ git add .
=========================================
4.將索引區(qū)文件提交到本地數(shù)據(jù)庫中
$ git commit -m "描述內(nèi)容"
注解一般格式為:
第1行:提交修改內(nèi)容的摘要
第2行:空行
第3行以后:修改的理由
提交完之后可以使用$ git status
確認(rèn)狀態(tài)
5.查看本地數(shù)據(jù)庫提交狀態(tài)
$ git log
=========================================
6.給遠(yuǎn)程數(shù)據(jù)庫起別名碍遍,一般為origin
我們可以給遠(yuǎn)程數(shù)據(jù)庫取一個別名。這樣矮锈,下次推送的時候就不需要輸入長串的遠(yuǎn)程數(shù)據(jù)庫地址了。在這個教程里睁蕾,我們的遠(yuǎn)程數(shù)據(jù)庫命名為“origin”苞笨。
請使用remote指令添加遠(yuǎn)程數(shù)據(jù)庫。在<name>
處輸入遠(yuǎn)程數(shù)據(jù)庫名稱子眶,在<url>
處指定遠(yuǎn)程數(shù)據(jù)庫的URL瀑凝。
$ git remote add <name> <url>
執(zhí)行推送或者拉取的時候,如果省略了遠(yuǎn)程數(shù)據(jù)庫的名稱臭杰,則默認(rèn)使用名為”origin“的遠(yuǎn)程數(shù)據(jù)庫粤咪。因此一般都會把遠(yuǎn)程數(shù)據(jù)庫命名為origin。
=========================================
7.將本地創(chuàng)建的數(shù)據(jù)庫推送到遠(yuǎn)程
我們首先在本地創(chuàng)建了一個數(shù)據(jù)庫渴杆,然后在github上創(chuàng)建了一個遠(yuǎn)程倉庫寥枝,現(xiàn)在要把本地的數(shù)據(jù)庫內(nèi)容推送到github上這個遠(yuǎn)程倉庫中:
使用push命令向數(shù)據(jù)庫推送更改內(nèi)容。<repository>
處輸入目標(biāo)地址磁奖,<refspec>
處指定推送的分支囊拜。
$ git push <repository> <refspec>
當(dāng)執(zhí)行命令時,如果您指定了-u選項比搭,那么下一次推送時就可以省略分支名稱了冠跷。但是,首次運行指令向空的遠(yuǎn)程數(shù)據(jù)庫推送時身诺,必須指定遠(yuǎn)程數(shù)據(jù)庫名稱和分支名稱蔽莱。
$ git push -u origin master
=========================================
8.將遠(yuǎn)程倉庫克隆到本地
使用clone指令可以復(fù)制數(shù)據(jù)庫,在<repository>指定遠(yuǎn)程數(shù)據(jù)庫的URL戚长,
在<directory>指定新目錄的名稱。
$ git clone <repository> <directory>
比如:
$ git clone https://nulab.backlog.jp/git/BLG/tutorial.git tutorial2
=========================================
9.在克隆的本地數(shù)據(jù)庫推送數(shù)據(jù)
當(dāng)在克隆的數(shù)據(jù)庫目錄執(zhí)行推送時怠苔,您可以省略數(shù)據(jù)庫和分支名稱同廉。
$ git push
=========================================
10.將遠(yuǎn)程數(shù)據(jù)庫內(nèi)容拉到本地
使用pull指令進(jìn)行拉取操作。省略數(shù)據(jù)庫名稱的話,會在名為origin的數(shù)據(jù)庫進(jìn)行pull迫肖。
$ git pull <repository> <refspec>
例如:
$ git pull origin master
拉取完成后锅劝,我們使用log
指令來確認(rèn)歷史記錄是否已更新
=========================================
11.解決沖突
如果執(zhí)行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的文件,在遠(yuǎn)程倉庫已經(jīng)有了新的修改
首先我們需要拉取到遠(yuǎn)程的最新修改:
$ git pull <repository> <refspec> //比如$ git pull origin master
這時候終端會顯示出沖突文件:
CONFLICT (content): Merge conflict in sample.txt
找到目標(biāo)文件修改沖突后蟆湖,文件的內(nèi)容發(fā)生了修改故爵,所以需要進(jìn)行提交:
$ git add sample.txt
$ git commit -m "合并"
這樣就完成了從遠(yuǎn)程數(shù)據(jù)庫導(dǎo)入最新的修改內(nèi)容。
我們可以用log命令來確認(rèn)數(shù)據(jù)庫的歷史記錄是否準(zhǔn)確隅津。指定--graph選項诬垂,能以文本形式顯示更新記錄的流程圖。指定--oneline選項伦仍,能在一行中顯示提交的信息结窘。
$ git log --graph --oneline
確認(rèn)無誤后,就可以執(zhí)行push
操作提交到遠(yuǎn)程了充蓝。
=========================================
12.建立分支
創(chuàng)建名為issue1的分支隧枫。 可以通過branch命令來創(chuàng)建分支。
$ git branch <branchname> // $ git branch issue1
創(chuàng)建名為issue1的分支谓苟。
不指定參數(shù)直接執(zhí)行branch命令的話官脓,可以顯示分支列表。 前面有*的就是現(xiàn)在的分支涝焙。
$ git branch
issue1
* master
=========================================
13.切換分支
若要在新建的issue1分支進(jìn)行修改提交卑笨,需要切換到issue1分支。
要執(zhí)行checkout命令以切換到目標(biāo)分支纱皆。
$ git checkout <branch> //$ git checkout issue1
切換到issue1分支湾趾。
注意
創(chuàng)建并切換分支:
在checkout命令指定 -b選項執(zhí)行,可以創(chuàng)建分支并進(jìn)行切換派草。
$ git checkout -b <branch>
=========================================
14.merge合并分支 fast-forward
執(zhí)行merge命令以合并分支搀缠。
$ git merge <commit> //該命令將指定分支導(dǎo)入到HEAD指定的分支。
先切換master分支:
$ git checkout master
Switched to branch 'master'
然后把issue1分支導(dǎo)入到master分支:
$ git merge issue1
master分支指向的提交移動到和issue1同樣的位置近迁。這個是fast-forward(快進(jìn))合并艺普。
=========================================
15.解決合并沖突
首先創(chuàng)建issue2分支和issue3分支,并切換checkout
到issue2分支修改內(nèi)容add
和commit
后鉴竭,
然后切換checkout
到issue3分支修改內(nèi)容add
和commit
要把issue2分支和issue3分支的修改合并到master:
-
切換master分支后歧譬,與issue2分支合并,執(zhí)行fast-forward(快進(jìn))合并。
快進(jìn)合并
$ 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.
自動合并失敗搏存。由于在同一行進(jìn)行了修改瑰步。修改沖突的部分,重新提交璧眠。
$ git add myfile.txt
$ git commit -m "合并issue3分支"
歷史記錄如圖所示缩焦。因為在這次合并中修改了沖突部分读虏,所以會重新創(chuàng)建合并修改的提交記錄。這樣袁滥,master的HEAD就移動到這里了盖桥。這種合并不是fast-forward合并,而是non fast-forward合并题翻。
=========================================
16.rebase合并分支
合并上述15條中的issue3分支的時候揩徊,使用rebase可以使提交的歷史記錄顯得更簡潔。
切換到issue3分支后嵌赠,對master執(zhí)行rebase塑荒。
$ git checkout issue3
Switched to branch 'issue3'
$ git rebase master
此時終端沖突報錯,和merge時的操作相同猾普,修改沖突提交
$ git add myfile.txt
$ git rebase --continue
狀態(tài)如下:
rebase的時候袜炕,修改沖突后的提交不是使用commit命令,而是執(zhí)行rebase命令指定 --continue
選項初家。若要取消rebase偎窘,指定--abort
選項。
這樣溜在,在master分支的issue3分支就可以fast-forward合并了陌知。切換到master分支后執(zhí)行合并:
$ git checkout master
Switched to branch 'master'
$ git merge issue3
Updating 8f7aa27..96a0ff0
Fast-forward
此時狀態(tài)如下:
=========================================
17.刪除分支
在branch命令指定-d選項執(zhí)行,以刪除分支掖肋。
$ git branch -d <branchname> // $ git branch -d issue1
執(zhí)行以下的命令以刪除issue1分支仆葡。
issue1分支被刪除了。您可以用branch
命令來確認(rèn)分支是否已被刪除志笼。
$ git branch
* master
=========================================
18.添加輕標(biāo)簽tag
使用tag命令來添加標(biāo)簽沿盅,在<tagname>執(zhí)行標(biāo)簽的名稱:
$ git tag <tagname> // $ git tag apple
在HEAD指向的提交里添加名為apple的標(biāo)簽,請執(zhí)行以下的命令纫溃。
如果沒有使用參數(shù)而執(zhí)行tag腰涧,可以顯示標(biāo)簽列表:
$ git tag
如果在log命令添加 --decorate選項執(zhí)行,可以顯示包含標(biāo)簽資料的歷史記錄:
$ 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.給輕標(biāo)簽tag添加注解
若要添加注解標(biāo)簽紊浩,可以使用-m:
$ git tag -m "add bundle" 1.0.1
在HEAD指向的提交里添加名為banana的標(biāo)簽窖铡。
也可以指定-m選項來添加注解:
git tag -a tagname -m "comments" //本地創(chuàng)建
如果在tag命令指定-n選項執(zhí)行,可以顯示標(biāo)簽的列表和注解:
$ git tag -n
apple first commit
banana 連猴子都懂的Git
提交tag到遠(yuǎn)程:
git push origin tagname //提交單個標(biāo)簽
git push origin --tags //提交所有標(biāo)簽
=========================================
20.刪除標(biāo)簽
若要刪除標(biāo)簽坊谁,在tag命令指定 -d選項執(zhí)行费彼。
$ git tag -d <tagname>
=========================================