EchoDemo's Blogs

Git入门(一)

1、git配置

//配置你的名字
$ git config --global user.name "Your Name"

//配置你的email    
$ git config --global user.email "email@example.com"

2、获得一个git仓库

(1)clone一个仓库

//下面的URL填写你在GitHub上的仓库链接
$ git clone https://github.com/shiyanlou/gitproject

(2)或者初始化一个新的仓库

//新建一个目录
$ mkdir project

//进入这个目录
$ cd project

//初始化git仓库
$ git init

3、git的基本流程

(1)创建或修改文件

//进入之前创建好的目录
$ cd project

//创建三个文件,可以使用vim进行编辑
$ touch file1 file2 file3

//查看当前git仓库的状态,发现有三个文件处于untracked状态
$ git status

(2)使用git add命令添加新创建或修改的文件到本地的缓存区

//新建三个文件(也可以是修改过的文件)
$ git add file1 file2 file3

//再次查看git仓库状态,此时已经为commit做好了准备
$ git status

//查看缓存区中哪些文件被修改了,进入到git diff --cached界面后需要输入q才可以退出如果没有--cached参数,git diff 会显示当前你所有已做的但没有加入到索引里的修改。
$ git diff --cached

(3)使用git commit命令提交到本地仓库

//使用git commit把所有被添加到缓存区的新建,修改的文件都提交到本地代码库。使用-m添加本次修改的注释,完成后就会记录一个新的项目版本。
$ git commit -m "add 3 files"

//我们还可以用下面的命令将所有没有加到缓存区的修改也一起提交,但-a命令不会添加新建的文件。
$ git commit -a -m "add 3 files"

//再次查看git仓库状态,此时的代码库已经没有待提交的文件了,缓存区已经被清空。
$ git status

需要注意的是如果是修改文件,也需要使用git add命令添加到缓存区才可以提交。如果是删除文件,则直接使用git rm命令删除后会自动将已删除文件的信息添加到缓存区,git commit提交后就会将本地仓库中的对应文件删除。

这时如果我们希望将本地仓库关联到远端服务器,我们可以使用 git remote 命令,不同于刚刚的 git clone 命令,直接将远端的仓库克隆下来。 我们当前的仓库是使用 git init 初始化的本地仓库,所以我们需要将本地仓库与远程仓库关联,使用如下命令(需要修改下面的远程仓库地址为自己的仓库地址)

//git remote add命令用于添加远程主机,origin是主机名,此处我们可以自定义,不一定非要使用 origin。后面的URL需要替换为自己的远程仓库地址
$ git remote add origin https://github.com/kinglion580

(4)使用git push命令将本地代码库同步到远端代码库

//这个时候如果本地的仓库连接到了远程Git服务器,可以使用下面的命令将本地仓库同步到远端服务器。需要输入仓库对应的用户名和密码
$ git push origin master

//下面的网址是远程仓库的ssh网址,左侧的master是本地工作区的分支名,一般都是master;而右侧的master则是远程的分支名,所以也就可以是你该远程仓库的其他分支名。
$ git push git@github.com:EchoDemo/EchoDemo.github.io.git master:master

4、git的分支与合并

(1)创建分支

//创建一个名为experimental的分支
$ git branch experimental

//查看当前的分支列表,experimental 分支是你刚才创建的,master分支是Git系统默认创建的主分支。星号标识了你此时工作在哪个分支下
$ git branch

(2)切换分支

//切换到其他分支
$ git checkout experimental

切换完成后,先编辑里面的一个文件,再提交(commit)改动,最后切换回 “master”分支:

//修改文件file1
$ echo "update" >> file1

//查看当前状态
git status

//添加并提交file1的修改到本地缓冲区
$ git add file1

//提交到本地仓库
$ git commit -m "update file1"

//查看file1的内容
$ cat file1

//切换到master分支
$ git checkout master

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

(3)合并分支

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

//修改文件file2
$ echo "update again" >> file2

//查看当前状态
$ git status

//添加并提交file2的修改
$ git add file2

//提交到本地仓库
$ git commit -m "update file2 on master"

//查看file2的内容
$ cat file2

此时两个分支就有了各自不同的修改,分支的内容都已经不同。由于两个branch修改了两个不同的文件,所以合并时不会有冲突,执行下面的命令后合并就完成了:

//切换到master分支
$ git checkout master

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

如果两个分支都改了一个文件file3,则会产生冲突,合并时会失败。首先我们在master分支上修改file3文件并提交:

//切换到master分支
$ git checkout master

//修改file3文件
$ echo "master: update file3" >> file3

//提交修改后的文件至本地缓冲区
$ git add file3

//提交到master分支
$ git commit -a -m 'update file3 on master'

然后切换到experimental,修改file3并提交:

//切换到experimental分支
$ git checkout experimental

//修改file3文件
$ echo "experimental: update file3" >> file3

//提交修改后的文件至本地缓冲区
$ git add file3

//提交到experimental分支
$ git commit -a -m 'update file3 on experimental'

切换到master进行合并:

//切换到master分支
$ git checkout master

//将experimental分支合并到master
$ git merge experimental

合并失败后先用git status查看状态,会发现file3显示为both modified。使用cat查看file3的内容,可以看到冲突的内容都被添加到了file3中,我们使用vim编辑这个文件,去掉git自动产生标志冲突的<<<<<<等符号后,根据需要只保留我们需要的内容后保存,然后使用git add file3和git commit命令来提交合并后的file3内容,这个过程是手动解决冲突的流程。

//编辑冲突文件
$ vim file3

//提交修改后的文件至本地缓冲区
$ git add file3

//提交到本地仓库
$ git commit -m 'merge file3'

(4)删除分支

//git branch -d只能删除那些已经被当前分支的合并的分支。如果你要强制删除某个分支的话就用git branch –D
$ git branch -d experimental

(5)撤销一个合并

$ git reset --hard HEAD^

查看file3的内容,已经恢复到合并前的master上的文件内容
$ cat file3

5、git日志

(1)查看日志

//git log命令可以显示所有的提交(commit)。如果提交的历史纪录很长,回车会逐步显示,输入q可以退出。
$ git log

(2)日志统计

//它会显示在每个提交(commit)中哪些文件被修改了, 这些文件分别添加或删除了多少行内容,这个命令相当于打印详细的提交记录
$ git log --stat

(3)格式化日志

你可以按你的要求来格式化日志输出。–pretty 参数可以使用若干表现格式。如:

$ 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)日志排序

按默认情况,提交会按逆时间顺序显示,可以指定–topo-order参数,让提交按拓扑顺序来显示(就是子提交在它们的父提交前显示)。你也可以用 –reverse参数来逆向显示所有提交日志。

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

注:执行一遍如下命令之后可以省去每次push都需输入账号和密码的烦恼哦!(当然,这一次的账号还是要输入的,此后便可以一劳永逸了,哈哈!)

git config --global credential.helper store
git push origin master
🐶 您的支持将鼓励我继续创作 🐶
-------------本文结束感谢您的阅读-------------