参考学习地址: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>
=========================================