Git的基本操做

Git与Github

介绍Git命令操做,必然要说起Github。git

GitHub介绍

Github是一个基于git的代码托管平台,主要为开发者提供基于git仓库的版本托管服务,并提供一个web界面。github

Github 由Chris Wanstrath, PJ Hyett 与Tom Preston-Werner三位开发者在2008年4月创办。 总部位于美国旧金山。web

Git

简单介绍一下Git:shell

Linux的创始人Linus Torvalds在2015年开发了Git的原型程序。数据库

Linux内核的更新速度在全世界也是数一数二。vim

Git 像是把数据看做是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的所有文件制做一个快照并保存这个快照的索引。 为了高效,若是文件没有修改,Git 再也不从新存储该文件,而是只保留一个连接指向以前存储的文件。 Git 对待数据更像是一个 快照流安全

Git 有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。 已提交表示数据已经安全的保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本作了标记,使之包含在下次提交的快照中。bash

基本的 Git 工做流程以下:网络

  1. 在工做目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域。
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

Git官方文档编辑器

GitHub与Git的关联

  • Git:开发者将源代码存入"Git仓库"的资料库中
  • GitHub:是在网络上提供Git仓库的一项服务
  • GitHub与Git的关联:GitHub上公开的软件源码是由Git进行管理,理解Git是熟练运用GitHub的关键所在

Git的初始设置

查看用户名和邮箱地址

$ git config user.name
$ git config user.email
复制代码

修改用户名和邮箱地址

$ git config --global user.name "Firstname Lastname"
$ git config --global user.email "your_email@example.com"
复制代码

也能够经过git的配置文件"~/.gitconfig"进行修改

提升命令输出的可读性 (git 命令行显示呈现color 高亮)

$ git config --global color.ui auto
复制代码

$ git config --global color.ui auto 这个命令至关于

$ git config --global color.diff auto
$ git config --global color.status auto
$ git config --global color.branch auto
$ git config --global color interactive auto
复制代码

查看配置是否生效

$ git config --list
复制代码

获取Git帮助

若你使用 Git 时须要获取帮助,有三种方法能够找到 Git 命令的使用手册:

$ git help <verb>
$ git <verb> --help
$ man git-<verb>
复制代码

例如,要想得到 config 命令的手册,执行

$ git help config
复制代码

Git的命令操做

从Github上clone已有仓库

打开Github,打开须要拷贝的仓库连接,点击右侧按钮:Clone or download,得到一个git地址(例如:git@github.com:user-name/new-repository.git)

$ git clone git@github.com:user-name/new-repository.git
Cloning into 'new-repository'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

$ cd new-repository
复制代码

注意:这里会要求输入GitHub上设置的公开密钥的密码,认证后,仓库便会被clone到仓库名后的目录中,将想要公开的代码提交至这个仓库再push到GitHub的仓库中,代码便会被公开。

Git基本操做

  1. 进行Git初始化,会获得一个**.git目录,这个.git目录里存储管理当前目录内容所须要的仓库数据,又叫"附属于该仓库的工做树"**:$ git init

  2. 查看当前Git仓库的状态所在分支$ git status

  3. 提交代码(若是是add . 则说明是提交的全部改变过的文件,不然须要根据单独的文件名分别上传):$ git add .

  4. 保存仓库的历史记录(将当前暂存区的文件世纪保存到仓库的历史记录中,以便往后在工做树中复原文件),记述一行提交信息$ git commit -m "提交信息的概述"

  5. 若是发现备注不够恰当,要修改上一条提交的备注信息:$ git commit --amend

  6. 若是想要记录更详细的提交信息请不要 -m,直接使用$ git commit ,执行后,VI的编辑模式会自动启动,会看到:

    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    # On branch master
    #
    # Initial commit
    #
    # Changes to be committed:
    # (use "git rm --cached <file>..." to unstage) #
    # new file: README.md
    #
    复制代码

    在编辑器中记述提交信息的格式以下:

    第一行:用一行文字简述提交的更改内容

    第二行:空行

    第三行之后:记述更改的缘由和详细内容

    如图所示:

    编辑完成后,退出VI模式,按esc再打:wq,保存并退出,而后再经过 $ git log 查看刚刚提交的记录

  7. 查看提交信息:$ git log

    • 只显示第一行提交信息:$ git log \-\-pretty=short

    • 只显示指定目录、文件的日志:$ git log 某文件名

    • 显示文件的改动,会对比文件的先后差异:$ git log -p

    • 显示具体文件的改动,会对比文件的先后差异:$ git log -p 文件名

      查看文件的操做日志(能够看到操做版本的哈希值):$ git reflog

  8. 查看更改先后的差异(查看工做树、暂存区、最新提交之间的差异):$ git diff

    其中:

    • "+",表示新添加的行
    • "-"号,表示被删除的行
  9. 查看工做树和最新提交的差异(养成好习惯,git commit以前先执行git diff HEAD):$ git diff HEAD

  10. 提交代码:$ git push

  11. 经过master分支提交到远程:$ git push -u origin "master"

  12. 查看所在分枝:$ git

  13. 切换分枝:$ git checkout \-\-master

VI编辑模式命令

此处咱们简单了解一下VI的几个命令,后面将会详细介绍VI环境的四种模式。

  1. 进入插入模式(INSERT):
    • a 光标以后插入/ A 行尾插入
    • i 光标以前插入/ I 行首插入
    • o 下一行插入 /O 上一行插入
  2. 进入命令模式(Command):
  3. 保存文件并退出:连按两次大写Z
  4. 保存不退出::w
  5. 系统退出VI,进入到shell模式::q
  6. 保存并退出::wq
  7. 不保存,强制退出::q!

更详细的vi/vim的介绍及相关命令请参考个人另外一篇文章:vim 小总结

Git分支操做

当进行多个并行做业时,咱们会用到分枝。在这类并行开发的过程当中,每每同时存在多个最新的代码状态。

不一样分支中,能够同时进行彻底不一样的做业,等该分支的做业完成以后再与master分支合并。

分支又分为:

  • 特性分支Topic(完成特定任务的分支)
  • 主干分支master

分支相关命令:

  1. 查看本地分支(带星号的为当前分支):$ git branch

  2. 查看远程仓库+本地仓库的分支信息:$ git branch -a

  3. 建立并切换分枝:$ git checkout -b 分支名

  4. 建立分枝:$ git branch 分支名

  5. 切换分枝:$ git checkout 分支名

  6. 切换回上一个分支:$ git checkout -

  7. 合并分支:切换回master分支,$ git merge \-\-no-ff 须要合并的分支名

    合并分支,须要各个分支先在各分支的领域里提交代码至远程仓库,然后由master分支对各个分支提交的内容进行合并。

  8. 合并某分支到当前分支:$ git merge <name>

  9. 删除分枝:$ git branch -d

  10. 强制删除分枝:$ git branch -D

  11. 以图表形式查看分支(能够看到各分支的合并状态,清楚明了):**$ git log \-\-graph**

  12. 回溯历史版本:$ git reset

  13. 回溯到某个指定状态:$ git reset --hard 哈希值

  14. 查看当前仓库的操做日志(从日志中找到哈希值)**$ git reflog**

  15. 消除冲突:

    例如:

    # Git教程

    <<<<<<< HEAD

    - feature-A 
    复制代码

    ======= - fix-B

    >>>>>>> fix-B

    =======以上的部分是当前HEAD的内容,如下的部分是要合并的 fix-B 分支中的内容。

    实际开发过程当中,每每须要删除其中之一,因此在处理时,须要仔细分析冲突部分再修改。

    解决冲突后,执行 $ git add 与 $ git commit 命令。

更改提交的操做:

  1. 修改已经提交了的备注信息(此处须要懂一些vim的相关命令常识):\$ git commit \-\-amend

    执行 git commit --amend 后,编辑器会启动,按esc 再按 i ,进入insert插入模式,修改好后,再点击esc,打:x,保存并退出。

    修改并保存退出后,执行$ git log \-\-graph命令,查看日志中的内容是否修改为功

  2. 压缩提交历史:$ git rebase -i

    不少咱们提交了例如 拼写错误等内容的修改,对于整个项目版本追溯的意义并不大,咱们并不但愿在历史记录中看到这类提交,所以能够选择使用合并历史提交记录的方式,将此记录与上一次有意义的提交记录合并为一次完美的提交

    例如:git rebase -i HEAD-2

    实际,git rebase -i HEAD-2 的做用是选定当前分支中包含HEAD在内的2个最新历史记录为对象,打开编辑器,进行备注信息的修改,修改完后保存并退出编辑器,再经过git log --graph查看,会发现,哈希值已经不是原来的了。

  3. 合并git add 和 git commit 这两个命令:$ git commit -am '备注内容'

  4. 对比修改文件:$ git diff

远程仓库的操做:

  1. 添加远程仓库到本地(执行git remote add后,git会自动将git@github.com:/…远程仓库的名称设置为origin(标识符)):

    $ git remote add origin git@github.com:user/new-repository.git
    复制代码
  2. 推送至远程仓库:$ git push -u origin master

    -u 参数能够在推送的同时,将origin仓库的master分支设置为本地仓库当前分支的upstream(上游)。

    添加了这个参数,未来运行git pull命令从远程仓库获取内容时,本地仓库的这个分支就能够直接从roigin的master分支获取内容,省去了另外添加参数的麻烦。

  3. 推送master意外的分支:

    先切换到其余分支
    $ git checkout -b 分支名
    再从意境切换到的分支上进行推送
    $ git push -u origin 分支名
    复制代码
  4. 获取远程仓库:$ git clone git@github.com:...

  5. 查看当前分支信息(本地和远程origin):$ git branch -a

    -a 参数能够同时显示本地仓库和远程仓库的分支信息

  6. 获取远程仓库的feature-D分支:$ git checkout -b feature-D origin/feature-D

  7. 获取最新的远程仓库分支:$ git pull origin feature-D

vi/vim的介绍及相关命令

vi/vim的介绍及相关命令请参考个人另外一篇文章:vim 小总结

相关文章
相关标签/搜索