初始化git

初始化git

免费而一流好用的Git不能够不了然!小楼给大家带来Git入门手册,教你用好Git,做个合格的程序猿!ง

  • 本课程为实验楼免费课程,想早先实际操作的恋人能够直接移步实验楼Git实战教程实验,边学边练!
  • 本教程分多期为我们更新,请大家马克并珍藏好每一期的始末方便学习!
  • 本课程为《Git Community Book
    普通话版》提供配套实验,汇集了Git社区的不少精华,
    扶助您赶紧的左右Git!

本节试行为 Git 入门第三个实验,能够扶持大家领会如何创建和采纳 git 仓库。

在采纳git进行代码管理在此以前,大家首先要对git实行早先化。

1.Git
布局利用Git的第三件事正是安装你的名字和email,那一个正是您在付给commit时的署名,每一回提交记录里都会含有这个音讯。使用git
config命令进行陈设:

$ git config --global user.name "Scott Chacon"$ git config --global user.email "schacon@gmail.com"

履行了下面的指令后,会在家目录(/home/shiyanlou)下树立二个叫.gitconfig
的公文(该文件为隐匿文件,必要使用ls -al查看到).
内容一般像下边那样,能够应用vim或cat查看文件内容:

$ cat ~/.gitconfig[user] email = schacon@gmail.com name = Scott Chacon

上边包车型大巴计划文件就是Git全局配置的公文,一般布署格局是git config –global
<配置名称> <配置的值>。

比方你想使项目里的有些值与前边的大局设置有分别(例如把私人邮箱地址改为工作邮箱),你能够在项目中应用git
config 命令不带 –global 选项来设置. 那会在你近日的体系目录下创办
.git/config,从而接纳针对当前项目标安排。

既是大家今日把全路都安装好了,那么大家需要1个Git仓库。有二种方式能够博得它:一种是从已某个Git仓库中clone
;还有一种是新建3个仓房,把未开始展览版本控制的文本进行版本控制。

1.Clone2个储藏室为了获取2个类型的正片,大家供给领会这一个体系仓库的地址.
Git能在广大商业事务下利用,所以Git U福特ExplorerL大概以ssh://, http://, git://.
有个别仓库能够透过不只一种协议来走访。

小编们在github.com上提供了1个名字为gitproject的供大家测试的公有仓库,那一个库房能够使用上面情势进行clone:

$ git clone https://github.com/shiyanlou/gitproject

clone操作达成后,会意识当前目录下多了三个gitproject文件夹,那几个文件夹里的情节正是我们正好clone下来的代码。由于如今`gitproject仅是测试项目,里面仅有一个README.md文件。

$ cd gitproject/$ ls README.md

细心的同校能够发今后指令提示符$后面多了个。那是出于实验楼的Linux使用的是zsh
Shell,zsh会判断当前的目录是或不是有Git仓库,若是是的话则自动把当下所在的git分支显示在提醒符中。Git
分支的概念大家会在稍后介绍。

2.初步化1个新的堆栈能够对一个已存在的公文夹用上边包车型地铁指令让它内置Git的版本控制管理之下。

创立代码目录project:

$ cd /home/shiyanlou/$ mkdir project

进入到代码目录,创制并起首化Git仓库:

$ cd project$ git init

Git会输出:

Initialized empty Git repository in /home/shiyanlou/project/.git/

经过ls -la命令会发现project目录下会有贰个名叫.git
的目录被创建,那表示三个库房被开端化了。能够进入到.git目录查看下有哪些内容。

  1. 平常的做事流程git的主导流程如下:

开创或修改文件使用git add命令添加新成立或改动的文书到地方的缓存区使用git
commit命令提交到地面代码库(可选,有的时候并从未能够一并的远端代码库)使用git
push命令将地面代码库同步到远端代码库进入大家刚刚建立的project目录,分别创立文件file1,file2,file3:

$ cd project$ touch file1 file2 file3

修改文件,能够应用vim编辑内容,也得以直接echo添加测试内容。

$ echo "test" >> file1$ echo "test" >> file2$ echo "test" >> file3

那时候得以行使git status命令查看当前git仓库的景况:

$ git statusOn branch masterInitial commitUntracked files: (use "git add <file>...") to include in what will be committed) file1 file2 file3nothing added to commit but untracked files present (use "git add" to track)

能够窥见,有多少个公文处于untracked状态,下一步大家就要求用git
add命令将他们投入到缓存区。

行使git add命令将新建的文本添加到:

$ git add file1 file2 file3

下一场再次实施git status就会发现新的变迁:

$ git statusOn branch masterInitial commitChanges to be committed: (use "git rm --cached <file>..." to unstage) new file: file1 new file: file2 new file: file3

你未来为commit做好了备选,你能够行使 git diff 命令再增加 –cached
参数,看看缓存区中怎样文件被改动了。进入到git diff
–cached界面后须求输入q才可以脱离:

$ git diff --cached

假诺没有–cached参数,git diff
会显示当前你持有已做的但尚无参加到目录里的改动。

一经你要做进一步的改动, 那就继续做,
做完后就把新修改的文件参预到缓存区中。

当全体新建,修改的文书都被添加到了缓存区,大家将要动用git
commit提交到当地仓库:

$ git commit -m "add 3 files"

亟需利用-m添加这次修改的注释,实现后就会记录3个新的类型版本。除了用git
add
命令,大家还足以用上边包车型地铁授命将兼具没有加到缓存区的改动也三头付给,但-a命令不会添加新建的文件。

$ git commit -a -m "add 3 files"

双重输入git
status查看状态,会发现眼下的代码库已经远非待提交的文书了,缓存区已经被清空。

由来,咱们做到了第③回代码提交,此次提交的代码中大家创制了四个新文件。要求留意的是一旦是修改文件,也急需运用git
add命令添加到缓存区才方可交到。若是是剔除文件,则间接行使git
rm命令删除后会自动将已去除文件的音信添加到缓存区,git
commit提交后就会将地方仓库中的对应文件删除。

那时候即便我们期望将地点仓库关联到远端服务器,我们得以选用 git remote
命令,差别于刚(Yu-Gang)刚的 git clone 命令,直接将远端的库房克隆下来。
大家脚下的堆栈是使用 git init
早先化的地头仓库,所以大家要求将地方仓库与远程仓库关联,使用如下命令(须求修改上边包车型地铁远程仓库地址为团结的堆栈地址):

git remote add origin https://github.com/yingque/novel_insect.git

GitHub使用基本流程,实战教程。对此上述命令而言,git remote add 命令用于添加远程主机,origin
是主机名,此处我们得以自定义,不必然非要使用 origin,而

必要替换为祥和的长距离仓库地址

以此时候固然当地的堆栈连接到了中远距离Git服务器,可以运用下边的吩咐将本地仓库同步到远端服务器:

急需输入仓库对应的用户名和密码

$ git push origin master

Git的分层能够让你在主线之外实行代码提交,同时又不会潜移默化代码库主线。分支的作用展示在多人协作开发中,比如四个团伙开发软件,你承担独立的二个效应须要3个月的年月来达成,你就足以成立1个分层,只把该功效的代码提交到那么些分支,而其他同事还是能几次三番应用主线开发,你天天的交给不会对她们造成任何影响。当您完毕作用后,测试通过再把你的效劳分支合并到主线。

1.分支3个Git仓库能够爱戴广大开发分支。以往我们来成立3个新的叫
experimental的分段:

$ git branch experimental

运作git
branch命令能够查阅当前的道岔列表,以及当前的开发条件处于哪个分支上:

$ git branch experimental* master

experimental
分支是你刚才创设的,master分支是Git系统默许创建的主分支。星号标识了您当工作在哪个分支下,输入git
checkout 分支名能够切换来别的分支:

$ git checkout experimentalSwitched to branch 'experimental'

切换成experimental分支,切换达成后,先编写制定里面包车型地铁3个文件,再付出更改,最后切换回
“master”分支:

# 修改文件file1$ echo "update" >> file1# 查看当前状态$ git status# 添加并提交file1的修改$ git add file1$ git commit -m "update file1"# 查看file1的内容$ cat file1testupdate# 切换到master分支$ git checkout master

翻开下file第11中学的内容会发觉刚才做的改动已经看不到了。因为刚刚的修改时在experimental分支下,现在切换回了master分支,目录下的文书都以master分支上的文本了。

到现在得以在master分支下再作一些不相同的修改:

# 修改文件file2$ echo "update again" >> file2# 查看当前状态$ git status# 添加并提交file2的修改$ git add file2$ git commit -m "update file2 on master"# 查看file2的内容$ cat file2testupdate again

那时候,几个分支就有了各自分裂的改动,分支的内容都已经区别,怎样将多少个分支进行联合呢?

能够通过下边包车型客车git merge命令来合并experimental到主线分支master:

# 切换到master分支$ git checkout master# 将experimental分支合并到master$ git merge -m 'merge experimental branch' experimental-m参数仍然是需要填写合并的注释信息。

是因为八个branch修改了多少个分化的文件,所以集合时不会有冲突,执行上边的指令后统一就形成了。

一经有争辩,比如三个分支都改了三个文书file3,则统近年来会退步。首先大家在master分支上修改file3文件并交给:

# 切换到master分支$ git checkout master# 修改file3文件$ echo "master: update file3" >> file3# 提交到master分支$ git commit -a -m 'update file3 on master'

然后切换来experimental,修改file3并交由:

# 切换到experimental分支$ git checkout experimental# 修改file3文件$ echo "experimental: update file3" >> file3# 提交到experimental分支$ git commit -a -m 'update file3 on experimental'

切换来master举行统一:

$ git checkout master$ git merge experimentalAuto-merging file3CONFLICT : Merge conflict in file3Automatic merge failed; fix conflicts and then commit the result.

统一破产后先用git status查看状态,会发觉file3呈现为both
modified,查看file3内容会发觉:

$ cat file3test<<<<<<< HEADmaster: update file3=======experimental: update file3>>>>>>> experimental

上边的内容也能够运用git diff查看,先前曾经关系git
diff不加参数能够显得未提交到缓存区中的修改内容。

能够看看冲突的始末都被添加到了file3中,大家使用vim编辑这几个文件,去掉git自动发生标志冲突的<<<<<<等标志后,依据须求只保留大家须要的内容后保存,然后利用git
add file3和git
commit命令来交付合并后的file3内容,这些历程是手动解决冲突的流程。

# 编辑冲突文件$ vim file3# 提交修改后的文件$ git add file3$ git commit -m 'merge file3'

当大家成功统一后,不再需求experimental时,能够运用上边包车型大巴通令删除:

$ git branch -d experimental

git branch -d只可以删除这一个已经被当下支行的会晤的分支.
假诺你要强制删除有些分支的话就用git branch –D

  1. 打消多个联合假设您认为你合并后的情形是一团乱麻,想把当下的改动都抛弃,你能够用上面包车型地铁指令归来合并以前的情况:

$ git reset --hard HEAD^# 查看file3的内容,已经恢复到合并前的master上的文件内容$ cat file3

3.连忙前进合并还有一种供给独特对待的情景,在前头没有涉嫌。平常,1个联结会时有产生多个联结提交,
把多少个父分支里的每一行内容都统一进来。

只是,若是当前的支行和另二个分段没有内容上的差异,便是说当前支行的每2个交到都早已存在另3个分支里了,git
就会实施1个“快速前进”(fast forward)操作;git
不创建任何新的付出,只是将近来支行指向合并进来的分层。

1.查看日志git log命令能够显得全体的提交:

$ git log

一经提交的历史纪录相当短,回车会逐步展现,输入q能够退出。

git log有不少精选,可以应用git help
log查看,例如下边包车型客车通令便是找出富有从”v2.5“初阶在fs目录下的拥有Makefile的修改:

$ git log v2.5.. Makefile fs/

Git会依据git log命令的参数,按时间顺序展现相关的交给。

2.日志总计若是用–stat选项应用’git
log’,它会显得在每一个提交中什么文件被改动了,
这么些文件分别增进或删除了不怎么行内容,那么些命令也就是打字与印刷详细的交由记录:

$ git log --stat

3.格式化日志你能够按你的须求来格式化日志输出。–pretty
参数能够运用几何显示格式,如oneline:

$ git log --pretty=oneline

要么你也得以使用 short 格式:

$ git log --pretty=short

您也可用medium,full,fuller,email 或raw。
假使那几个格式不完全符合你的须要, 你也能够用–pretty=format参数定义格式。

–graph 选项可以可视化你的交由图(commit
graph),会用ASCII字符来画出三个绝对漂亮貌的交付历史(commit history)线:

$ git log --graph --pretty=oneline

4.日志排序日志记录能够按差异的逐条来浮现。假诺你要内定一个特定的依次,可以为git
log命令添加顺序参数。

按私下认可情形,提交会按逆时间顺序突显,可以内定–topo-order参数,让提交按拓扑顺序来展现(正是子提交在它们的父提交前浮现):

$ git log --pretty=format:'%h : %s' --topo-order --graph

您也得以用 –reverse参数来逆向展现全体提交日志。

本节执教了几个主导命令:

  • git config:配置相关音信
  • git clone:复制仓库
  • git init:开头化仓库
  • git add:添加更新内容到目录中
  • git diff:相比较内容
  • git status:获取当前项目景况
  • git commit:提交
  • git branch:分支相关
  • git checkout:切换分支
  • git merge:合并分支
  • git reset:恢复生机版本
  • git log:查看日志

本期课程甘休啦,光说不练假把式。建议我们开通GitHub账号,成立演习仓库并演练三遍上述所讲的内容才能更好的巩固所学的知识点。下一期,敬请关注!ノ

传送门:

往期回想: 下期预报:

澳门金沙国际 1澳门金沙国际 2

常用命令

git config:配置相关信息
git clone:复制仓库
git init:初阶化仓库
git add:添加更新内容到目录中
git diff:相比内容
git status:获取当前项目境况
git commit:提交
git branch:分支相关
git checkout:切换分支
git merge:合并分支
git reset:恢复生机版本
git log:查看日志

配置git

  • 使用Git的第叁件事就是设置你的名字和email,那一个正是您在付给commit时的签名,每一次提交记录里都会含有那几个音信。使用git
    config命令实行配置

[root@bogon ~]# git config --global user.name "xiangcl"
[root@bogon ~]# git config --global user.email "xiangcl_cs@qq.com"
  • 执行了上边的授命后,会在家目录(/root)下创设3个叫.gitconfig的文书(该公文为隐匿文件,要求利用ls -al查看到).
    内容相似像上面那样,能够行使vim或cat查看文件内容:

[root@bogon ~]# cat .gitconfig
[user]
name = xiangcl
email = xiangcl_cs@qq.com
  • 地方的安插文件正是Git全局配置的文件,一般安顿情势是git config --global <配置名称> <配置的值>

  • 如果你想使项目里的某部值与前方的全局设置有分别(例如把私人邮箱地址改为工作邮箱),你可以在档次中运用git config一声令下不带--global分选来设置.
    这会在你日前的门类目录下创建.git/config,从而选取针对当前项指标配备。

配置git

  • 运用Git的率先件事正是设置你的名字和email,这么些正是您在交付commit时的署名,每回提交记录里都会含有这几个消息。使用git
    config命令举办安插

[root@bogon ~]# git config --global user.name "xiangcl"
[root@bogon ~]# git config --global user.email "xiangcl_cs@qq.com"
  • 实践了上面的下令后,会在家目录(/root)下成立2个叫.gitconfig的公文(该公文为隐蔽文件,需求使用ls -al查看到).
    内容类同像上边那样,能够利用vim或cat查看文件内容:

[root@bogon ~]# cat .gitconfig
[user]
name = xiangcl
email = xiangcl_cs@qq.com
  • 地方的布署文件正是Git全局配置的文书,一般布署方式是git config --global <配置名称> <配置的值>

  • 如果你想使项目里的某部值与前方的全局设置有分别(例如把私人邮箱地址改为工作邮箱),你能够在项目中央银行使git config一声令下不带--global分选来设置.
    那会在你眼下的档次目录下创立.git/config,从而选用针对当前项指标布署。

Git配置

第①次选择Git的时候需求设置username and
email,那就相当于展现自身身份(使用git config命令实行布署):

git config --global user.name "Cluas"
git config --global user.email "Cluas@live.cn"

设若你采纳linux终端执行以上命令,就会在用户/home/#用户名 下新建二个称为
.gitconfig 的文书 (注:隐藏文件,使用 ls -al
可以查阅)。你会看到类型上面包车型大巴内容,能够利用vim只怕cat命令查看内容:

$ cat ~/.gitconfig
[user] 
            email = Cluas@live.cn
            name = Cluas

以上文件被号称Git全局配置文件,一般布置方式为:

git config --globa l<配置名称> <配置值>

自然借使你想使项目里的某部值与后面包车型客车全局设置有分别(例如把私人邮箱地址改为办事邮箱),你能够在档次中接纳git
config命不带 –global选项来设置. 那会在你日前的类型目录下开创
.git/config,从而选拔针对当下项指标计划。

配置GitHub

配置GitHub

获取二个Git仓库

诚如的话,获取八个Git仓库的主意有三种:
1.经过git clone 命令克隆一个库房到当地
(值得注意的是 Git能在各个Git能在很多商业事务下利用,所以Git UMuranoL大概以ssh://,
http(s)://, git://. 有个别仓库能够因此不只一种协议来走访)

#git clone 加上你要clone的仓库地址
#示例
git clone https://github.com/Cluas/Cluas.git

经过上述的操作,你会发觉你的当前目录下会多叁个名叫Cluas的文件夹,里面包车型客车始末正是大家刚克隆下来的代码。
2.通过开始化新建二个仓房
回顾的话,伊始化的长河便是把贰个不想关的文书夹通过初始化命令使它放到Git版本控制管理之下。
创设代码目录 test:

$ cd /home/#用户名/
$ mkdir test

跻身代码目录,创设并初步化Git仓库:

$ cd test
$ git init

Git会输出:

Initialized empty Git repository in /home/#用户名/test/.git/

由此ls
-ls命令会发现test目录下会生出3个名叫.git目录的公文,那就标明已经早先化成功,有趣味的话能够进入.git查看里面的内容。

注册GitHub

继续有时光另写一篇教程,那里不在赘述…

注册GitHub

继承有时间另写一篇教程,那里不在赘述…

做事流程

1.寻常的劳作流程
git的基本流程如下:
1.创办或涂改文件
2.利用 git add 命令把新创设或然涂改的公文添加到本地缓存区(Index)
3.运用git commit 命令提交到地面代码库
4.(可选,有的时候并从未得以联手的远端代码库)使用git
push命令将地方代码库同步到远端代码库
跻身我们刚刚建立的test目录,分别创制文件file1,file2,file3:

$ cd test$ touch file1 file2 file3

修改文件,能够行使vim编辑内容,也足以间接echo添加测试内容。

$ echo "testcontent1" >> file1
$ echo "testcontent2" >> file2
$ echo "testcontent3" >> file3

那儿可以应用git status
澳门金沙国际,命令查看当前git仓库的图景:

$ git statusOn branch masterInitial commitUntracked files: (use "git 
add <file>...") to include in what will be committed) file1 file2 
file3nothing added to commit but untracked files present (use "git 
add" to track)

能够发现,有七个公文处于untracked状态,下一步我们就须要用git
add命令将她们加入到缓存区(Index)。使用git add命令将新建的文本添加到:

$ git add file1 file2 file3

接下来重新实施git status
就会发现新的变更:

$ git statusOn branch masterInitial commitChanges to be 
committed: (use "git rm --cached <file>..." to unstage) new file: file1 
new file: file2 new file: file3

您将来为commit
抓实了备选,你能够采纳 git diff
指令再加上 –cached
参数,看看缓存区中怎么着文件被改动了。进入到git diff –cached
界面后供给输入q
才能够脱离:

$ git diff --cached

即便没有–cached
参数,git diff
会展现当前你拥有已做的但没有插手到目录里的改动。
只要你要做进一步的改动, 那就持续做,
做完后就把新修改的文本出席到缓存区中。
当有着新建,修改的文本都被添加到了缓存区,大家将要选取git commit
交付到地方仓库:

$ git commit -m "add 3 files"

内需运用-m
充裕本次修改的注脚,完毕后就会记录贰个新的花色版本。除了用git add
指令,我们还足以用上边包车型大巴指令将拥有没有加到缓存区的修改也一块儿提交,但-a命令不会添加新建的文书。

$ git commit -a -m "add 3 files"

重复输入git status
翻开意况,会发现脚下的代码库已经没有待提交的文件了,缓存区已经被清空。
于今,大家成功了第二回代码提交,这一次提交的代码中大家成立了八个新文件。须求留意的是借使是修改文件,也亟需动用git
add命令添加到缓存区才方可交到。假诺是去除文件,则直接使用git
rm命令删除后会自动将已去除文件的新闻添加到缓存区,git
commit提交后就会将地点仓库中的对应文件删除。
本条时候假如地方的库房连接到了中远距离Git服务器,能够使用上面的命令将当地仓库同步到远端服务器:

$ git push origin master

那时恐怕须求您输入在Git服务器上的用户名和密码。

配置Git

  • 在本土创设ssh key:

ubuntu@VM-0-26-ubuntu:~$ sudo ssh-keygen -t rsa -C "xiangcl_cs@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Ia1lou/M0ZNnLW6Dly9+Ws1kX89Uq5eF9wUBgFGChDA xiangcl_cs@qq.com
The key's randomart image is:
+---[RSA 2048]----+
|  E. o..o+o....  |
|   .. ....     . |
|      o =     . .|
|     . * .     oo|
|    . . S     +.*|
|     . . . . =.=B|
|      o +.+.o.oo=|
|     + ..=*o. .  |
|      +  ++*.    |
+----[SHA256]-----+

展现如上则意味成立成功。注意,上边命令中的邮箱"xiangcl_cs@qq.com"请更换为温馨的信箱,前边密钥设置密码,那里小编不要设置,直接一路回车就行。

  • 安装成功会在 /root/ 下生成多个.ssh文本,因为要进来 /root
    目录,所以必要转为root身份:

ubuntu@VM-0-26-ubuntu:~$ sudo -s
root@VM-0-26-ubuntu:~# cd /root
root@VM-0-26-ubuntu:/root# cd .ssh/
root@VM-0-26-ubuntu:/root/.ssh# ls -l
total 8
-rw------- 1 root root 1675 May 18 16:14 id_rsa
-rw-r--r-- 1 root root  399 May 18 16:14 id_rsa.pub
  • 打开id_rsa.pub,复制里面包车型地铁key
  • 接下来粘贴至GitHub,Settings/SSH and GPG keys/New SSH key
  • 使用 ssh -T git@github.com 验证是不是安装成功

root@VM-0-26-ubuntu:~# ssh -T git@github.com
The authenticity of host 'github.com (192.30.253.112)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.253.112' (RSA) to the list of known hosts.
Hi xiangcl! You've successfully authenticated, but GitHub does not provide shell access.

按提示输入yes,看到You’ve successfully authenticated, but GitHub does
not provide shell access则表示连接成功。

配置Git

  • 在地头制造ssh key:

ubuntu@VM-0-26-ubuntu:~$ sudo ssh-keygen -t rsa -C "xiangcl_cs@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Ia1lou/M0ZNnLW6Dly9+Ws1kX89Uq5eF9wUBgFGChDA xiangcl_cs@qq.com
The key's randomart image is:
+---[RSA 2048]----+
|  E. o..o+o....  |
|   .. ....     . |
|      o =     . .|
|     . * .     oo|
|    . . S     +.*|
|     . . . . =.=B|
|      o +.+.o.oo=|
|     + ..=*o. .  |
|      +  ++*.    |
+----[SHA256]-----+

呈现如上则表示创设成功。注意,上面命令中的邮箱"xiangcl_cs@qq.com"请更换为和谐的信箱,前边密钥设置密码,那里笔者不用设置,直接一路回车就行。

  • 安装成功会在 /root/ 下生成3个.ssh文本,因为要跻身 /root
    目录,所以必要转为root身份:

ubuntu@VM-0-26-ubuntu:~$ sudo -s
root@VM-0-26-ubuntu:~# cd /root
root@VM-0-26-ubuntu:/root# cd .ssh/
root@VM-0-26-ubuntu:/root/.ssh# ls -l
total 8
-rw------- 1 root root 1675 May 18 16:14 id_rsa
-rw-r--r-- 1 root root  399 May 18 16:14 id_rsa.pub
  • 打开id_rsa.pub,复制里面包车型客车key
  • 下一场粘贴至GitHub,Settings/SSH and GPG keys/New SSH key
  • 使用 ssh -T git@github.com 验证是不是安装成功

root@VM-0-26-ubuntu:~# ssh -T git@github.com
The authenticity of host 'github.com (192.30.253.112)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.253.112' (RSA) to the list of known hosts.
Hi xiangcl! You've successfully authenticated, but GitHub does not provide shell access.

按提醒输入yes,看到You’ve successfully authenticated, but GitHub does
not provide shell access则象征连接成功。

分段和联合

1.分支
叁个Git仓库可以爱慕广大费用分支。以往大家来创建2个新的交experimental的分段:

$git branch experimental

运作 git branch 命令能够查阅当前的道岔列表,
以及当前的开发条件处于哪个分支上:

$ git branch 
experimental
* master

experimental分支是你刚刚创造的,master分支是Git系统暗中同意成立的主分支。*号标识了你当前工作在哪个分支下,输入git
checkout 分支名 能够切换成任何分支:

$ git checkout experimental
Switched to branch 'experimental'

切换到experimental
分层,切换完结后,先编写制定里面包车型客车2个文件,再付诸(commit)改动,最终切换回
“master”分支:

# 修改文件file1
$ echo "update" >> file1# 查看当前状态
$ git status# 添加并提交file1的修改$ git add file1
$ git commit -m "update file1"# 查看file1的内容
$ cat file1testupdate# 切换到master分支
$ git checkout master

查阅file第11中学的内容会意识刚才做的改动已经看不见了。因为刚刚修改是在分支experimental下,未来切换回master主分支了,此时目录下的公文都以master分支上的公文。
今昔在master分支下再做一些差异的改动:

#修改文件file2
$echo "update again" >> file2
#查看当前状态
$git status
#添加并提交file2的修改
$gie add file2
$git commit -m "update file2 on master"
#查看file2的内容
$cat file2
test
update again

这时,八个分支就有了独家不一样的改动,分支的始末都已经差别,怎样将五个支行进行合并呢?
可以通过上边包车型大巴git merge 命令来合并experimental 到主线分支master:

#切换到master分支
$git checkout master
#将experimental分支合并到master
$git merge  - m 'merge experimental branch' experimental

-m 参数仍旧是亟需填写合并的备考音讯。
出于八个baranch修改四个例外的公文,所以集合时不会有冲突,执行上边的吩咐后联合就到位了。
借使有争论,比如五个支行都修改了三个文书file3,则统暂且会失利。首先大家在master分支上修改file3文件并提交:

&git checkout master
$echo "master:update file3 on master

下一场切换成experimental,修改flie3并付出:

$git checkout experimental 
$echo "experimental :update file3 on experimental" >>file3
$git  commit -a -m 'update file3 on experimental'

切换成master进行统一:

$git checkout master
$git merge experimental
Auto-merging file3
CONFLICT (content): Merge conflict in file3
Automatic merge failed; fix conflicts and then commit the result.

统一破产后先用git status查看状态,会发现file3展现为both
modified,查看file3内容会意识:

$ cat file3
test
<<<<<<< HEAD
master: update file3
=======experimental: update file3
>>>>>>> experimental

地方的始末也足以动用git diff
查看,先前早就涉嫌git diff
不加参数能够显得未提交到缓存区中的修改内容。
能够观望争论的始末都被添加到了file3中,大家选择vim编辑那么些文件,去掉git自动产生标志争辨的<<<<<<
等标志后,根据供给只保留大家供给的内容后保存,然后利用git add file3
和git commit
指令来交付合并后的file3内容,这么些进度是手动化解争持的流程。

收获3个Git仓库

既然大家前天把全部都安装好了,那么大家要求三个Git仓库。有二种格局能够拿走它:一种是从已部分Git仓库中clone
(克隆,复制);还有一种是新建3个仓房,把未进行版本控制的文本实行版本控制。

收获1个Git仓库

既然大家未来把整个都安装好了,那么大家供给3个Git仓库。有二种方式能够赢得它:一种是从已部分Git仓库中clone
(克隆,复制);还有一种是新建多个仓房,把未举办版本控制的文本举办版本控制。

编写冲突文件$ vim file3# 提交修改后的文件$ git add file3$ git commit -m ‘merge file3’

当大家做到联合后,不再须要experimental
时,能够利用上面包车型大巴一声令下删除:

$ git branch -d experimental

git branch -d

不得不删除那个早已被当下支行的合并的分支.
假若你要强制删除某个分支的话就用git branch –D

2.撒销2个联合
假设您以为您合并后的情事是一团乱麻,想把当下的修改都放弃,你能够用上面的吩咐归来合并从前的状态:
$ git reset –hard HEAD^#
查看file3的剧情,已经平复到统一前的master上的文件内容$ cat file3

3.便捷前进合并
还有一种供给格外对待的情事,在前方没有关联。平时,3个统一会发出三个集合提交(commit),
把三个父分支里的每一行内容都合并进来。
唯独,假设当前的分支和另一个分支没有内容上的出入,正是说当前支行的每叁个交付(commit)都早就存在另二个分段里了,git
就会实行贰个“火速前进”(fast forward)操作;git
不创设任何新的提交(commit),只是将近来支行指向合并进来的道岔。
六、Git日志
1.查看日志
git log命令能够显得全体的交给(commit):

$ git log

要是提交的历史纪录非常短,回车会日渐显示,输入q
能够退出。
git log
有不少精选,能够应用git help log
查阅,例如下边的命令就是找出全数从”v2.5“开端在fs目录下的保有Makefile的修改:
$ git log v2.5.. Makefile fs/

Git会依照git log命令的参数,按时间各种显示相关的交由(commit)。
2.日志总计
一经用–stat选项应用’git
log’,它会显得在每一个提交(commit)中怎么着文件被涂改了,
那些文件分别增进或删除了有个别行内容,那么些命令相当于打字与印刷详细的提交记录:

$ git log --stat

3.格式化日志
您能够按你的需求来格式化日志输出。–pretty
参数可以行使几何表现格式,如oneline

:
$ git log --pretty=oneline

要么您也得以使用 short
格式:

$ git log --pretty=short

您也可用medium
,full
,fuller
,email
或raw
。 借使这几个格式不完全符合你的相求, 你也能够用–pretty=format
参数定义格式。
–graph
选拔能够可视化你的提交图(commit
graph),会用ASCII字符来画出三个极美丽的交付历史(commit history)线:

$ git log --graph --pretty=oneline

4.日记排序
日记记录能够按区别的依次来体现。假使您要内定八个特定的种种,能够为git
log
命令添加顺序参数。
按私下认可情形,提交会按逆时间各类展现,能够钦命–topo-order
参数,让提交按拓扑顺序来显示(正是子提交在它们的父提交前显
示):

$ git log --pretty=format:'%h : %s' --topo-order --graph

您也可以用 –reverse
参数来逆向显示所有提交日志。
当中技术:!
忽略某个文件
主意: 在顶层工作目录中添加二个.gitignore 的文书
: 以’#’ 初步的行,被视为注释。 忽略掉全部文件名是 foo.txt 的公文。
foo.txt

忽视全体变化的 html 文件。
*.html

foo.html是手工业维护的,所以分歧。
!foo.html

忽视全数.o 和 .a文件。
*.[oa]

Clone一个仓房

  • 为了得1个项指标正片(copy),大家要求精通这几个种类仓库的地址(Git UCRUISERL).
    Git能在重重协议下使用,所以Git
    UCR-VL大概以ssh://, http(s)://, git://.
    有些仓库能够通过不只一种协议来访问。

  • 此处在本身的GitHub上提供的一个名字为GitTest的堆栈供大家测试的公有仓库,那个库房能够利用上边情势开始展览clone:

[root@bogon ~]# git clone https://github.com/xiangcl/GitTest.git
正克隆到 'GitTest'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), done.
  • clone操作完结后,会意识当前目录下多了3个GitTest的文件夹,这一个文件夹里的剧情正是大家刚刚clone下来的代码。由于近年来GitTest仅是测试项目,里面仅有README.md和LICENSE文件。

[root@bogon ~]# cd GitTest/
[root@bogon GitTest]# ls
LICENSE  README.md

Clone多个仓库

  • 为了得1个类型的正片(copy),大家需求通晓这一个类型仓库的地址(Git UOdysseyL).
    Git能在不少磋商下行使,所以Git
    UEnclaveL大概以ssh://, http(s)://, git://.
    某些仓库可以透过不只一种协议来访问。

  • 此处在本身的GitHub上提供的一个名字为GitTest的堆栈供我们测试的公有仓库,这么些库房能够使用上面格局进行clone:

[root@bogon ~]# git clone https://github.com/xiangcl/GitTest.git
正克隆到 'GitTest'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), done.
  • clone操作完毕后,会意识当前目录下多了叁个GitTest的文本夹,这些文件夹里的内容正是我们正好clone下来的代码。由于如今GitTest仅是测试项目,里面仅有README.md和LICENSE文件。

[root@bogon ~]# cd GitTest/
[root@bogon GitTest]# ls
LICENSE  README.md

伊始化八个新仓库

能够对一个已存在的文件夹用上边的一声令下让它内置Git的版本控制管理之下。

  • 创设代码目录project:

[root@bogon gitproject]# cd ~

[root@bogon ~]# mkdir project
  • 进入到代码目录,成立并发轫化Git仓库:

[root@bogon ~]# cd project/

[root@bogon project]# git init

初始化空的 Git 版本库于 /root/project/.git/

通过ls -la命令会发现project目录下会有3个名叫.git的目录被成立,那代表3个储藏室被开始化了。能够进来到.git目录查看下有哪些内容。

起头化3个新仓库

能够对3个已存在的公文夹用上面包车型大巴授命让它放到Git的版本控制管理之下。

  • 创造代码目录project:

[root@bogon gitproject]# cd ~

[root@bogon ~]# mkdir project
  • 进去到代码目录,创制并初阶化Git仓库:

[root@bogon ~]# cd project/

[root@bogon project]# git init

初始化空的 Git 版本库于 /root/project/.git/

通过ls -la命令会发现project目录下会有二个名为.git的目录被成立,这意味多个仓房被初步化了。能够进来到.git目录查看下有哪些内容。

Git工作流程

git基本工作流程如下:

  1. 始建或涂改文件
  2. 使用git add指令添加新成立或改动的文书到地点的缓存区(Index)
  3. 使用git commit指令提交到本地代码库
  4. (可选,有的时候并没有能够协同的远端代码库)使用git push命令将当地代码库同步到远端代码库
  • 进入大家刚刚建立的project目录,分别创设文件file1,file2,file3

[root@bogon ~]# cd project/

[root@bogon project]# touch file1 file2 file3
  • 修改文件,能够运用vim编辑内容,也得以直接echo添加测试内容。

[root@bogon project]# echo "test" >> file1

[root@bogon project]# echo "test" >> file2

[root@bogon project]# echo "test" >> file3
  • 那时能够采用git status一声令下查看当前git仓库的意况:

[root@bogon project]# git status

# 位于分支 master

#

# 初始提交

#

# 未跟踪的文件:

# (使用 "git add <file>..." 以包含要提交的内容)

#

# file1

# file2

# file3

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

能够发现,有四个公文处于未跟踪(untracked)状态,下一步大家就需求用git add指令将他们参预到缓存区(Index)。

  • 使用git add指令将新建的公文添加到:

[root@bogon project]# git add file1 file2 file3
  • 下一场再一次实施git status就会发觉新的变动:

[root@bogon project]# git status

# 位于分支 master

#

# 初始提交

#

# 要提交的变更:

# (使用 "git rm --cached <file>..." 撤出暂存区)

#

# 新文件: file1

# 新文件: file2

# 新文件: file3

#
  • 您现在为commit做好了预备,你可以应用 git diff 命令再添加 –cached
    参数,看看缓存区中怎样文件被修改了。

[root@bogon project]# git diff --cached

若果没有--cached参数,git diff
会展现当前你富有已做的但从不投入到目录里的改动。

假使你要做越来越的改动, 那就接二连三做,
做完后就把新修改的文书参与到缓存区中。

  • 当全数新建,修改的文书都被添加到了缓存区,咱们就要选用git commit交由到地面仓库:

[root@bogon project]# git commit -m "add 3 files"

[master(根提交) bbb9a52] add 3 files

 3 files changed, 3 insertions(+)

 create mode 100644 file1

 create mode 100644 file2

 create mode 100644 file3

内需使用-m加上本次修改的注释,实现后就会记录四个新的类型版本。

  • 除了用git add指令,大家还足以用上面包车型大巴下令将具备没有加到缓存区的改动也共同付给,但-a命令不会添加新建的文件。

$ git commit -a -m "add 3 files"

再一次输入git status查看景况,会发觉脚下的代码库已经没有待提交的文本了,缓存区已经被清空。

迄今截至,我们完毕了第二次代码提交,本次提交的代码中我们创制了多少个新文件。须要小心的是一旦是修改文件,也亟需选择git add命令添加到缓存区才能够提交。假如是剔除文件,则从来利用git rm指令删除后会自动将已去除文件的新闻添加到缓存区,git commit交给后就会将本地仓库中的对应文件删除。

Git工作流程

git基本工作流程如下:

  1. 创造或修改文件
  2. 使用git add一声令下添加新创建或修改的文本到地面包车型地铁缓存区(Index)
  3. 使用git commit指令提交到地点代码库
  4. (可选,有的时候并不曾得以协同的远端代码库)使用git push命令将本地代码库同步到远端代码库
  • 进入咱们刚刚建立的project目录,分别创设文件file1,file2,file3

[root@bogon ~]# cd project/

[root@bogon project]# touch file1 file2 file3
  • 修改文件,可以选择vim编辑内容,也足以直接echo添加测试内容。

[root@bogon project]# echo "test" >> file1

[root@bogon project]# echo "test" >> file2

[root@bogon project]# echo "test" >> file3
  • 那时候能够动用git status命令查看当前git仓库的状态:

[root@bogon project]# git status

# 位于分支 master

#

# 初始提交

#

# 未跟踪的文件:

# (使用 "git add <file>..." 以包含要提交的内容)

#

# file1

# file2

# file3

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

能够窥见,有多个文本处于未跟踪(untracked)状态,下一步大家就要求用git add一声令下将她们投入到缓存区(Index)。

  • 使用git add指令将新建的文本添加到:

[root@bogon project]# git add file1 file2 file3
  • 下一场再一次实施git status就会发觉新的变型:

[root@bogon project]# git status

# 位于分支 master

#

# 初始提交

#

# 要提交的变更:

# (使用 "git rm --cached <file>..." 撤出暂存区)

#

# 新文件: file1

# 新文件: file2

# 新文件: file3

#
  • 你未来为commit做好了预备,你能够利用 git diff 命令再加上 –cached
    参数,看看缓存区中什么文件被涂改了。

[root@bogon project]# git diff --cached

借使没有--cached参数,git diff
会显示当前您具备已做的但并未投入到目录里的修改。

只要您要做进一步的改动, 那就继续做,
做完后就把新修改的文书参加到缓存区中。

  • 当全体新建,修改的文件都被添加到了缓存区,我们将要采纳git commit交付到地头仓库:

[root@bogon project]# git commit -m "add 3 files"

[master(根提交) bbb9a52] add 3 files

 3 files changed, 3 insertions(+)

 create mode 100644 file1

 create mode 100644 file2

 create mode 100644 file3

要求选择-m拉长这一次修改的注脚,达成后就会记录一个新的品种版本。

  • 除了用git add指令,大家还足以用上边包车型地铁命令将富有没有加到缓存区的改动也一路付出,但-a命令不会添加新建的文件。

$ git commit -a -m "add 3 files"

重复输入git status翻开情形,会发觉脚下的代码库已经没有待提交的文件了,缓存区已经被清空。

由来,大家成功了第②次代码提交,这一次提交的代码中大家创造了四个新文件。供给注意的是若是是修改文件,也急需选择git add一声令下添加到缓存区才得以交给。倘诺是删除文件,则间接行使git rm命令删除后会自动将已去除文件的新闻添加到缓存区,git commit交由后就会将本地仓库中的对应文件删除。

为您的体系增加多个新的远程仓库

地点仓库是创办完毕了,未来内需与远程的仓库进行链接。

[root@bogon project]# git remote
[root@bogon project]# git remote add origin git@github.com:xiangcl/project.git
[root@bogon project]# git remote -v
origin  git@github.com:xiangcl/project.git (fetch)
origin  git@github.com:xiangcl/project.git (push)

为您的体系增加一个新的远程仓库

本土仓库是开创完成了,未来急需与远程的堆栈进行链接。

[root@bogon project]# git remote
[root@bogon project]# git remote add origin git@github.com:xiangcl/project.git
[root@bogon project]# git remote -v
origin  git@github.com:xiangcl/project.git (fetch)
origin  git@github.com:xiangcl/project.git (push)

推送到长途仓库

以此时候要是地点的仓库连接到了远程Git服务器,能够使用下边包车型大巴下令将当地仓库同步到远端服务器:(注意,须求与远程仓库连接)

[root@bogon project]# git push -u origin master
Warning: Permanently added the RSA host key for IP address '192.30.255.113' to the list of known hosts.
Counting objects: 14, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (14/14), 1.16 KiB | 0 bytes/s, done.
Total 14 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), done.
To git@github.com:xiangcl/project.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

地点运用git push时带上了-u参数,是将当地的master分支推送到origin主机,同时钦赐origin为私下认可主机,前边就足以不加任何参数使用git
push了。

推送到长途仓库

其一时半刻候假设当地的库房连接到了长途Git服务器,能够选拔上边包车型客车吩咐将地面仓库同步到远端服务器:(注意,须求与长途仓库连接)

[root@bogon project]# git push -u origin master
Warning: Permanently added the RSA host key for IP address '192.30.255.113' to the list of known hosts.
Counting objects: 14, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (14/14), 1.16 KiB | 0 bytes/s, done.
Total 14 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), done.
To git@github.com:xiangcl/project.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

地点运用git push时带上了-u参数,是将当地的master分支推送到origin主机,同时钦命origin为暗中同意主机,后边就足以不加任何参数使用git
push了。

从远端仓库下载新支行与数量

  • git fetch会造访远程仓库,从中拉取全体你还没有的数据。
    执行到位后,你将会具有12分远程仓库中有着支行的引用,能够随时合并或查看。

[root@bogon project]# git remote -v
origin  git@github.com:xiangcl/project.git (fetch)
origin  git@github.com:xiangcl/project.git (push)
[root@bogon project]# git fetch origin 
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
来自 github.com:xiangcl/project
   6c3b072..4d38d99  master     -> origin/master

git fetch origin会抓取从你上次仿制以来旁人上传到此远程仓库中的全部更新(或是上次
fetch 以来外人付出的翻新)。有一些很要紧,需求记住,fetch
命令只是将远端的数量拉到本地仓库,并不自行合并到当前工作分支,唯有当你实在准备好了,才能手工合并。

  • 查看分支

git branch命令的-r选项,能够用来查阅远程分支,-a选项查看全部支行。

[root@bogon project]# git branch -r 
  origin/master

[root@bogon project]# git branch -a
* master
  remotes/origin/master

地点命令表示,本地主机的当前支行是master,远程分支是origin/master。

  • 收复远程主机的更新之后,能够在它的根底上,使用git checkout命令制造三个新的道岔。

[root@bogon project]# git checkout -b newBrack origin/master 
分支 newBrack 设置为跟踪来自 origin 的远程分支 master。
切换到一个新分支 'newBrack'

上边命令表示,在origin/master的根基上,成立2个新支行。

  • 别的,也足以选用git merge命令恐怕git rebase一声令下,在本土分支上联合远程分支。

[root@bogon project]# git merge origin/master 
Already up-to-date.

[root@bogon project]# ls
file1  file2  file3  README.md

上面命令表示在此时此刻支行上,合并origin/master。此时应用ls就可以查阅到本人正要在库房段创立的README.md文件了

从远端仓库下载新支行与数量

  • git fetch会访问远程仓库,从中拉取全数你还未曾的数额。
    执行到位后,你将会具有十三分远程仓库中负有支行的引用,能够随时合并或查看。

[root@bogon project]# git remote -v
origin  git@github.com:xiangcl/project.git (fetch)
origin  git@github.com:xiangcl/project.git (push)
[root@bogon project]# git fetch origin 
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
来自 github.com:xiangcl/project
   6c3b072..4d38d99  master     -> origin/master

git fetch origin会抓取从你上次仿制以来外人上传到此远程仓库中的全体更新(或是上次
fetch 以来外人付出的换代)。有某个很重点,须要记住,fetch
命令只是将远端的多寡拉到本地仓库,并不自行合并到当前工作分支,唯有当你真正准备好了,才能手工业合并。

  • 翻看分支

git branch命令的-r选项,能够用来查阅远程分支,-a选项查看全体支行。

[root@bogon project]# git branch -r 
  origin/master

[root@bogon project]# git branch -a
* master
  remotes/origin/master

上边命令表示,本地主机的近期支行是master,远程分支是origin/master。

  • 收复远程主机的更新之后,能够在它的底子上,使用git checkout一声令下创设三个新的分层。

[root@bogon project]# git checkout -b newBrack origin/master 
分支 newBrack 设置为跟踪来自 origin 的远程分支 master。
切换到一个新分支 'newBrack'

上边命令表示,在origin/master的基本功上,创制三个新支行。

  • 除此以外,也可以使用git merge指令或许git rebase命令,在地点分支上统一远程分支。

[root@bogon project]# git merge origin/master 
Already up-to-date.

[root@bogon project]# ls
file1  file2  file3  README.md

下面命令表示在现阶段支行上,合并origin/master。此时采纳ls就足以查看到笔者正要在库房段创造的README.md文件了

分层与统一

Git的支行能够让你在主线(master分支)之外进行代码提交,同时又不会影响代码库主线。分支的机能展现在多人合营开发中,比如二个公司开发软件,你承担独立的1个作用须求三个月的时日来完结,你就能够成立3个分支,只把该功用的代码提交到这一个分支,而任何同事还是能持续选用主线开发,你天天的交付不会对她们造成别的影响。当您完了作用后,测试通过再把你的法力分支合并到主线。

分层与统一

Git的支行能够让你在主线(master分支)之外举办代码提交,同时又不会影响代码库主线。分支的意义呈未来四人同盟开发中,比如四个团体开发软件,你承担独立的1个效益须求1个月的时辰来实现,你就能够创立2个分层,只把该意义的代码提交到那几个分支,而任何同事还能一而再行使主线开发,你每一日的交给不会对她们造成别的影响。当你做到成效后,测试通过再把你的坚守分支合并到主线。

分支

  • 三个Git仓库能够保险广大费用分支。未来大家来创制1个新的叫
    experimental的分段:

[root@bogon project]# git branch experimental
  • 运营git
    branch命令能够查阅当前的分支列表,已经最近的支出条件处于哪个分支上:

[root@bogon project]# git branch
  experimental
* master
  • experimental
    分支是您刚刚成立的,master分支是Git系统暗中认可成立的主分支。星号标识了您当工作在哪些分支下,输入git
    checkout 分支名能够切换成其它分支:

[root@bogon project]# git checkout experimental
切换到分支 'experimental'
  • 切换来experimental分支,切换完成后,先编写制定里面的1个文书,再付出(commit)改动,最终切换回
    “master”分支:

[root@bogon project]# echo "update" >> file1 # 修改file1文件
[root@bogon project]# git status # 使用 git status 查看当前状态
# 位于分支 experimental
# 尚未暂存以备提交的变更:
# (使用 "git add <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 修改: file1
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@bogon project]# git add file1 # 添加并提交file1的更改
[root@bogon project]# git commit -m "update file1"
[experimental 3251fbe] update file1
 1 file changed, 1 insertion(+)
[root@bogon project]# cat file1 #查看file1文件的内容
test
update
[root@bogon project]# git checkout master #切换至master分支

切换到分支 'master'

查看下file1中的内容会发现刚才做的修改已经看不到了。因为刚刚的改动时在experimental分支下,以往切换回了master分支,目录下的文件都是master分支上的文书了。

  • 最近能够在master分支下再作一些区别的改动:

[root@bogon project]# echo 'update again' >> file2 #修改file2文件

[root@bogon project]# git status #查看当前状态

# 位于分支 master

# 尚未暂存以备提交的变更:

# (使用 "git add <file>..." 更新要提交的内容)

# (使用 "git checkout -- <file>..." 丢弃工作区的改动)

#

# 修改: file2

#

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

[root@bogon project]# git add file2 #添加并调教file2的修改

[root@bogon project]# git commit -m "update file2 on master"

[master 7f50340] update file2 on master

 1 file changed, 1 insertion(+)

[root@bogon project]# cat file2 #查看file2的修改

test

update again

此刻,多少个支行就有了个别不相同的修改,分支的情节都早就今非昔比,怎么着将四个支行举行联合呢?

  • 能够因而上边包车型客车git merge命令来合并experimental到主线分支master:

[root@bogon project]# git checkout master # 切换至master 分支

已经位于 'master'

[root@bogon project]# git merge -m "merge experimental branch" experimental #将 experimental 分支合并至master分区

Merge made by the 'recursive' strategy.

 file1 | 1 +

 1 file changed, 1 insertion(+)

-m参数如故是索要填写合并的注释消息。

出于多少个branch修改了多少个差别的公文,所以集合时不会有争执,执行下面的通令后联合就到位了。

  • 一旦有争辨,比如三个分支都改了3个文本file3,则统最近会战败。首先大家在master分支上修改file3文件并提交:

[root@bogon project]# git checkout master # 切换至 master 分区

已经位于 'master'

[root@bogon project]# echo "master:update file3" >> file3 # 修改 file3 文件

[root@bogon project]# git status # 查看当前状态

# 位于分支 master

# 尚未暂存以备提交的变更:

# (使用 "git add <file>..." 更新要提交的内容)

# (使用 "git checkout -- <file>..." 丢弃工作区的改动)

#

# 修改: file3

#

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

[root@bogon project]# git commit -a -m 'update file3 on master' #提交至master分区

[master 2922456] update file3 on master

 1 file changed, 1 insertion(+)

[root@bogon project]# git status #在次查看状态

# 位于分支 master

无文件要提交,干净的工作区
  • 接下来切换成experimental,修改file3并交由:

[root@bogon project]# git checkout experimental # 切换至 experimental 分支
切换到分支 'experimental'
[root@bogon project]# echo "experimental: update file3" >> file3 # 修改 file3 文本
[root@bogon project]# git commit -a -m 'update file3 on experimental' # 提交至experimental 分支
[experimental e511488] update file3 on experimental
 1 file changed, 1 insertion(+)
  • 切换来master进行统一:

[root@bogon project]# git checkout master # 切换至 master 分支
切换到分支 'master'
[root@bogon project]# git merge experimental # 合并分支
自动合并 file3
冲突(内容):合并冲突于 file3
自动合并失败,修正冲突然后提交修正的结果。
  • 统一破产后先用git status查看状态,会发现file3显示为both
    modified,查看file3内容会意识:

[root@bogon project]# git status #查看状态
# 位于分支 master
# 您有尚未合并的路径。
# (解决冲突并运行 "git commit")
#
# 未合并的路径:
# (使用 "git add <file>..." 标记解决方案)
#
# 双方修改: file3
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@bogon project]# cat file3 # 查看产生冲突的文件
test
<<<<<<< HEAD
master:update file3
=======
experimental: update file3
>>>>>>> experimental

上面包车型客车始末也能够选取git diff查看,先前早已提到git
diff不加参数能够展现未提交到缓存区中的修改内容。

  • 能够看来顶牛的始末都被添加到了file3中,大家选拔vim编辑那一个文件,去掉git自动发生标志争辩的<<<<<<等标志后,依照需求只保留我们要求的内容后保存,然后使用git
    add file3和git
    commit命令来交付合并后的file3内容,那些进度是手动化解争辨的流程。

[root@bogon project]# vim file3 # 使用 vim 打开文件修改

[root@bogon project]# git status #查看状态

# 位于分支 master

# 您有尚未合并的路径。

# (解决冲突并运行 "git commit")

#

# 未合并的路径:

# (使用 "git add <file>..." 标记解决方案)

#

# 双方修改: file3

#

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

[root@bogon project]# git add file3 # 将文件加入缓存

[root@bogon project]# git status # 再次查看状态

# 位于分支 master

# 所有冲突已解决但您仍处于合并中。

# (使用 "git commit" 结束合并)

#

# 要提交的变更:

#

# 修改: file3

#

[root@bogon project]# git commit -m 'merge file3' # 提交修改的文件

[master 6b63f36] merge file3
  • 当我们成功统一后,不再供给experimental时,能够接纳下边包车型大巴一声令下删除:

[root@bogon project]# git branch -d experimental
已删除分支 experimental(曾为 e511488)。

git branch -d只好删除那多少个曾经被当下支行的联结的分支.
若是您要强制删除有些分支的话就用git branch –D

分支

  • 二个Git仓库可以体贴广大开销分支。未来大家来创设三个新的叫
    experimental的道岔:

[root@bogon project]# git branch experimental
  • 运营git
    branch命令可以查阅当前的支行列表,已经近年来的支付环境处于哪个分支上:

[root@bogon project]# git branch
  experimental
* master
  • experimental
    分支是你刚刚创制的,master分支是Git系统默许创设的主分支。星号标识了你当工作在哪些分支下,输入git
    checkout 分支名能够切换来别的分支:

[root@bogon project]# git checkout experimental
切换到分支 'experimental'
  • 切换来experimental分支,切换完结后,先编写制定里面包车型大巴1个文书,再交付(commit)改动,最后切换回
    “master”分支:

[root@bogon project]# echo "update" >> file1 # 修改file1文件
[root@bogon project]# git status # 使用 git status 查看当前状态
# 位于分支 experimental
# 尚未暂存以备提交的变更:
# (使用 "git add <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 修改: file1
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@bogon project]# git add file1 # 添加并提交file1的更改
[root@bogon project]# git commit -m "update file1"
[experimental 3251fbe] update file1
 1 file changed, 1 insertion(+)
[root@bogon project]# cat file1 #查看file1文件的内容
test
update
[root@bogon project]# git checkout master #切换至master分支

切换到分支 'master'

翻开下file1中的内容会意识刚才做的修改已经看不到了。因为刚刚的修改时在experimental分支下,未来切换回了master分支,目录下的文书都以master分支上的文本了。

  • 现行反革命能够在master分支下再作一些不一的改动:

[root@bogon project]# echo 'update again' >> file2 #修改file2文件

[root@bogon project]# git status #查看当前状态

# 位于分支 master

# 尚未暂存以备提交的变更:

# (使用 "git add <file>..." 更新要提交的内容)

# (使用 "git checkout -- <file>..." 丢弃工作区的改动)

#

# 修改: file2

#

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

[root@bogon project]# git add file2 #添加并调教file2的修改

[root@bogon project]# git commit -m "update file2 on master"

[master 7f50340] update file2 on master

 1 file changed, 1 insertion(+)

[root@bogon project]# cat file2 #查看file2的修改

test

update again

此时,多个分支就有了独家不相同的改动,分支的内容都已经区别,如何将八个分支举办联合呢?

  • 能够通过上面包车型地铁git merge命令来合并experimental到主线分支master:

[root@bogon project]# git checkout master # 切换至master 分支

已经位于 'master'

[root@bogon project]# git merge -m "merge experimental branch" experimental #将 experimental 分支合并至master分区

Merge made by the 'recursive' strategy.

 file1 | 1 +

 1 file changed, 1 insertion(+)

-m参数仍旧是索要填写合并的注释音信。

是因为多个branch修改了四个区别的文件,所以集合时不会有争执,执行下面的一声令下后联合就到位了。

  • 借使有争持,比如五个支行都改了3个文书file3,则统一时会战败。首先大家在master分支上修改file3文件并交由:

[root@bogon project]# git checkout master # 切换至 master 分区

已经位于 'master'

[root@bogon project]# echo "master:update file3" >> file3 # 修改 file3 文件

[root@bogon project]# git status # 查看当前状态

# 位于分支 master

# 尚未暂存以备提交的变更:

# (使用 "git add <file>..." 更新要提交的内容)

# (使用 "git checkout -- <file>..." 丢弃工作区的改动)

#

# 修改: file3

#

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

[root@bogon project]# git commit -a -m 'update file3 on master' #提交至master分区

[master 2922456] update file3 on master

 1 file changed, 1 insertion(+)

[root@bogon project]# git status #在次查看状态

# 位于分支 master

无文件要提交,干净的工作区
  • 然后切换成experimental,修改file3并付诸:

[root@bogon project]# git checkout experimental # 切换至 experimental 分支
切换到分支 'experimental'
[root@bogon project]# echo "experimental: update file3" >> file3 # 修改 file3 文本
[root@bogon project]# git commit -a -m 'update file3 on experimental' # 提交至experimental 分支
[experimental e511488] update file3 on experimental
 1 file changed, 1 insertion(+)
  • 切换成master进行联合:

[root@bogon project]# git checkout master # 切换至 master 分支
切换到分支 'master'
[root@bogon project]# git merge experimental # 合并分支
自动合并 file3
冲突(内容):合并冲突于 file3
自动合并失败,修正冲突然后提交修正的结果。
  • 合并破产后先用git status查看状态,会意识file3显示为both
    modified,查看file3内容会发现:

[root@bogon project]# git status #查看状态
# 位于分支 master
# 您有尚未合并的路径。
# (解决冲突并运行 "git commit")
#
# 未合并的路径:
# (使用 "git add <file>..." 标记解决方案)
#
# 双方修改: file3
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@bogon project]# cat file3 # 查看产生冲突的文件
test
<<<<<<< HEAD
master:update file3
=======
experimental: update file3
>>>>>>> experimental

地点的情节也得以利用git diff查看,先前早就涉嫌git
diff不加参数能够浮现未提交到缓存区中的修改内容。

  • 能够见见争论的内容都被添加到了file3中,我们运用vim编辑那个文件,去掉git自动发生标志冲突的<<<<<<等标志后,依照须求只保留大家供给的情节后保存,然后接纳git
    add file3和git
    commit命令来交付合并后的file3内容,这一个进程是手动解决争辩的流水生产线。

[root@bogon project]# vim file3 # 使用 vim 打开文件修改

[root@bogon project]# git status #查看状态

# 位于分支 master

# 您有尚未合并的路径。

# (解决冲突并运行 "git commit")

#

# 未合并的路径:

# (使用 "git add <file>..." 标记解决方案)

#

# 双方修改: file3

#

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

[root@bogon project]# git add file3 # 将文件加入缓存

[root@bogon project]# git status # 再次查看状态

# 位于分支 master

# 所有冲突已解决但您仍处于合并中。

# (使用 "git commit" 结束合并)

#

# 要提交的变更:

#

# 修改: file3

#

[root@bogon project]# git commit -m 'merge file3' # 提交修改的文件

[master 6b63f36] merge file3
  • 当我们成功统一后,不再必要experimental时,能够利用上边包车型大巴通令删除:

[root@bogon project]# git branch -d experimental
已删除分支 experimental(曾为 e511488)。

git branch -d只好删除这一个早已被日前支行的晤面的分支.
假若您要强制删除有个别分支的话就用git branch –D

撤除一个联合

  • 若是你以为您合并后的情事是一团乱麻,想把近日的修改都放任,你能够用下边包车型地铁吩咐归来合并以前的景况:

[root@bogon project]# git reset --hard HEAD^
HEAD 现在位于 2922456 update file3 on master
[root@bogon project]# cat file3
test
master:update file3

撤回贰个联结

  • 一旦你以为你合并后的情形是一团乱麻,想把当下的改动都放弃,你能够用下边包车型大巴通令归来合并以前的情事:

[root@bogon project]# git reset --hard HEAD^
HEAD 现在位于 2922456 update file3 on master
[root@bogon project]# cat file3
test
master:update file3

推送至远程仓库

  • 在本机完结改动后就足以交给到长途仓库了

git push origin master

能够把 master 换到你想要推送的其它分支。

  • 万一您还从未仿制现有仓库,并欲将你的堆栈连接到有些远程服务器,你能够动用如下命令添加:

git remote add origin <server>

那样你就能够将您的更改推送到所添加的服务器上去了。

推送至远程仓库

  • 在本机完结改动后就足以交给到长途仓库了

git push origin master

能够把 master 换来你想要推送的其它分支。

  • 设若你还并未仿制现有仓库,并欲将您的库房连接到有个别远程服务器,你能够选取如下命令添加:

git remote add origin <server>

如此那般你就可见将您的改动推送到所增进的服务器上去了。

立异与联合

  • 要更新您的地面仓库至最新改动,执行:

git pull

以在您的做事目录中 获取(fetch) 并 合并(merge) 远端的更改。

  • 要合并别的分支到您的日前支行(例如 master),执行:

git merge <branch>
  • 在那三种状态下,git
    都会尝试去自动合并改动。遗憾的是,那只怕并非每回都成功,并或者现身争执(conflicts)。
    那时候就供给你改改这个文件来手动合并这几个争辩(conflicts)。改完事后,你须求举行如下命令以将它们标记为联合成功:

git add <filename>
  • 在集合改动在此之前,你可以动用如下命令预览差距:

git diff <source_branch> <target_branch>

参考:Git
Pro、阮一峰的网络日志

迎接待上访问小编的个人Blog:xiangcl.com

更新与联合

  • 要立异您的地头仓库至最新改动,执行:

git pull

以在您的办事目录中 获取(fetch) 并 合并(merge) 远端的改观。

  • 要合并别的分支到你的脚下支行(例如 master),执行:

git merge <branch>
  • 在那二种情状下,git
    都会尝试去自动合并改动。遗憾的是,那大概毫无每一趟都事业有成,并可能出现顶牛(conflicts)。
    那时候就必要你改改那个文件来手动合并这几个冲突(conflicts)。改完现在,你必要举办如下命令以将它们标记为统10%功:

git add <filename>
  • 在统一改动在此之前,你能够动用如下命令预览差别:

git diff <source_branch> <target_branch>

参考:Git
Pro、阮一峰的网络日志

迎接待上访问笔者的个人Blog:xiangcl.com

相关文章