Git基本用法(上)

一、Git的初始化

A、Git配置

1.使用Git的第一件事就是设置你的名字和email,这些就是你在提交commit时的签名,每次提交记录里都会包含这些信息。使用git config命令进行配置:

2.执行了上面的命令后,会在家目录(/home/shiyanlou)下建立一个叫.gitconfig 的文件(该文件为隐藏文件,需要使用ls -al查看到). 内容一般像下面这样,可以使用vim或cat查看文件内容:——如下图所示
实验楼

3.上面的配置文件就是Git全局配置的文件,一般配置方法是git config --global <配置名称> <配置的值>。

4.**P.S.?*如果你想使项目里的某个值与前面的全局设置有区别(例如把私人邮箱地址改为工作邮箱),你可以在项目中使用git config 命令不带 --global 选项来设置. 这会在你当前的项目目录下创建 .git/config,从而使用针对当前项目的配置。


B、Clone一个仓库

  • 为了得到一个项目的拷贝(copy),我们需要知道这个项目仓库的地址(Git URL). Git能在许多协议下使用,所以Git URL可能以ssh://, http(s)?/, git://. 有些仓库可以通过不只一种协议来访问。
  • clone 操作完成后,会发现当前目录下多了一个gitproject文件夹,这个文件夹里的内容就是我们刚刚clone下来的代码。由于当前`gitproject仅是测试项目,里面仅有一个README.md文件。
  • 可以发现在命令提示符$前面多了个(master)。这是由于实验楼的Linux使用的是zsh Shell,zsh会判断当前的目录是否有Git仓库,如果是的话则自动把目前所在的git分支显示在提示符中。

C、初始化一个新的仓库

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目录查看下有哪些内容。
  • 代码截图见下图——
    实验楼

二、正常的工作流程

git的基本流程如下:

1.创建或修改文件
2.使用git add命令添加新创建或修改的文件到本地的缓存区(Index)
3.使用git commit命令提交到本地代码库(可选,有的时候并没有可以同步的远端代码库)
4.使用git push命令将本地代码库同步到远端代码库


A、创建或修改文件

  • 进入我们刚才建立的project目录,分别创建文件file1,file2,file3:
  • 实验楼
  • 此时可以使用git status命令查看当前git仓库的状态:
  • 可以发现,有三个文件处于untracked状态,下一步我们就需要用git add命令将他们加入到缓存区(Index)

B、使用Git add加入缓存区

  • 使用git add命令将新建的文件添加
  • 然后再次执行git status就会发现新的变化
  • 现在为commit做好了准备,可以使用 git diff 命令再加上 --cached 参数,看看缓存区中哪些文件被修改了。进入到git diff --cached界面后需要输入q才可以退出
  • 如果没有–cached参数,git diff 会显示当前你所有已做的但没有加入到索引里的修改
    实验楼

C、使用git commit提交修改

  • 当所有新建,修改的文件都被添加到了缓存区,我们就要使用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 remote 命令,不同于刚刚的 git clone 命令,直接将远端的仓库克隆下来。 我们当前的仓库是使用 git init 初始化的本地仓库,所以我们需要将本地仓库与远程仓库关联,使用如下命令(需要修改下面的远程仓库地址为自己的仓库地址):
  • 对于上述命令而言,git remote add 命令用于添加远程主机,origin 是主机名,此处我们可以自定义,不一定非要使用 origin,而 https://github.com/kinglion580/shiyanlou.git 是我自己的远程仓库,此处 需要替换为自己的远程仓库地址
  • 这个时候如果本地的仓库连接到了远程Git服务器,可以使用下面的命令将本地仓库同步到远端服务器:
    • 需要输入仓库对应的用户名和密码
    • $ git push origin master
      实验楼

三、分支与合并

A、创建分支

  • 一个Git仓库可以维护很多开发分支。现在我们来创建一个新的叫 experimental的分支:
    • $ git branch experimental
  • 运行git branch命令可以查看当前的分支列表,以及目前的开发环境处在哪个分支上
    • $ git branch

B、切换分支

  • experimental 分支是你刚才创建的,master分支是Git系统默认创建的主分支。星号标识了你当工作在哪个分支下,输入git checkout 分支名可以切换到其他分支:
    • $ git checkout experimental
    • Switched to branch ‘experimental’
  • 切换到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分支上的文件了
    实验楼

C、合并分支

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

    • 修改文件file2
      • echo “update again” >> file2
    • 查看当前状态
      • git status
    • 添加并提交file2的修改
      • git 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参数仍然是需要填写合并的注释信息。
  • 由于两个 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 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内容会发现:(此处略去)

  • 上面的内容也可以使用git diff查看,先前已经提到git diff不加参数可以显示未提交到缓存区中的修改内容。

  • 可以看到冲突的内容都被添加到了file3中,我们使用vim编辑这个文件,去掉git自动产生标志冲突的单向箭头等符号后,根据需要只保留我们需要的内容后保存,然后使用git add file3和git commit命令来提交合并后的file3内容,这个过程是手动解决冲突的流程。

    • 编辑冲突文件
      • vim file3
    • 提交修改后的文件
      • git add file3
      • git commit -m ‘merge file3’
        实验楼
        实验楼

D、撤销一个合并

  • 如果合并后的状态是一团乱麻,想把当前的修改都放弃,你可以用下面的命令回到合并之前的状态:
    * git reset --hard HEAD^
    • 查看file3的内容,已经恢复到合并前的master上的文件内容
      • cat file3
    • 代码截图如下所示——
      实验楼

E、快速向前合并

  • 通常,一个合并会产生一个合并提交(commit), 把两个父分支里的每一行内容都合并进来。
  • 但是,如果当前的分支和另一个分支没有内容上的差异,就是说当前分支的每一个提交(commit)都已经存在另一个分支里了,git 就会执行一个“快速向前"(fast forward)操作;git 不创建任何新的提交(commit),只是将当前分支指向合并进来的分支。

四、Git日志

A、查看日志

  • 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)

B、日志统计

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

C、格式化日志

  • 你可以按你的要求来格式化日志输出。–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

D、日志排序

  • 日志记录可以按不同的顺序来显示。如果你要指定一个特定的顺序,可以为git log命令添加顺序参数。
  • 按默认情况,提交会按逆时间顺序显示,可以指定–topo-order参数,让提交按拓扑顺序来显示(就是子提交在它们的父提交前显示):
    • git log --pretty=format:’%h : %s’ --topo-order --graph
  • 你也可以用 --reverse参数来逆向显示所有提交日志。

五、该章节小结

本节共几个基本命令:

  • 1.git config:配置相关信息
  • 2.git clone:复制仓库
  • 3.git init:初始化仓库
  • 4.git add:添加更新内容到索引中
  • 5.git diff:比较内容
  • 6.git status:获取当前项目状况
  • 7.git commit:提交
  • 8.git branch:分支相关
  • 9.git checkout:切换分支
  • 10.git merge:合并分支
  • 11.git reset:恢复版本
  • 12.git log:查看日志
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值