• Home
  • About
    • shawvey photo

      shawvey

      在写bug比赛中荣获第一名🐛

    • Learn More
    • Email
    • Twitter
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Tags
  • Notes

Git学习之基础用法(下)

29 Dec 2019

Reading time ~7 minutes

本文目录🧾

  • 概述
    • 分布式的工作流程
      • git pull
      • 公共Git仓库
      • 将修改推向一个公共仓库
      • 推送代码失败
    • Git标签🏷️
      • 标签对象
    • 接下来…
    • 参考

正文部分📝

继续学习Git!冲鸭!🦆🦆🦆

概述

本节将学习下面知识点:

  • 分布式的工作流程
  • git tag

分布式的工作流程

git pull

git pull 命令等同于执行两个操作: 先使用 git fetch 从远程分支抓取最新的分支修改信息,然后使用 git merge 把修改合并进当前的分支。

$ git pull /tmp/myrepo master

这就把 myrepo 的主分支合并到了当前分支。

如果 myrepo 和 gitproject 在不同的主机上,可以通过 ssh 协议来执行 clone 和pull 操作:

$ git clone localhost:/home/shiyanlou/gitproject test (test是分支名)

公共Git仓库

开发过程中,通常大家都会使用一个公共的仓库,并 clone 到自己的开发环境中,完成一个阶段的代码后可以告诉目标仓库的维护者来 pull 自己的代码。

如果你和维护者都在同一台机器上有帐号,那么你们可以互相从对方的仓库目录里直接拉所作的修改,git 命令里的仓库地址也可以是本地的某个目录名:

$ git clone 仓库A的路径
$ git pull 仓库B的路径

也可以是一个ssh地址:

$ git clone ssh://服务器/账号/仓库名称  

将修改推向一个公共仓库

通过 http 或是 git 协议,其它维护者可以通过远程访问的方式抓取(fetch)你最近的修改,但是他们没有写权限。如何将本地私有仓库的最近修改主动上传到公共仓库中呢?

最简单的办法就是用 git push 命令,推送本地的修改到远程 Git 仓库,执行下面的命令:

$ git push ssh://服务器仓库地址 master:master

或者

$ git push ssh://服务器仓库地址 master

git push 命令的目地仓库可以是 ssh 或 http/https 协议访问。

推送代码失败

如果推送(push)结果不是快速向前 fast forward,可能会报像下面一样的错误:

error: remote 'refs/heads/master' is not an ancestor of
local  'refs/heads/master'.
Maybe you are not up-to-date and need to pull first?
error: failed to push to 'ssh://yourserver.com/~you/proj.git'

这种情况通常是因为没有使用 git pull 获取远端仓库的最新更新,在本地修改的同时,远端仓库已经变化了(其他协作者提交了代码),此时应该先使用 git pull 合并最新的修改后再执行 git push:

$ git pull
$ git push ssh://服务器仓库地址 master

Git标签🏷️

我们可以用 git tag 不带任何参数创建一个标签(tag)指定某个提交(commit):

# 进入到gitproject目录
$ cd /home/shiyanlou/gitproject

# 查看git提交记录
$ git log

# 选择其中一个记录标志位stable-1的标签,注意需要将后面的8c315325替换成仓库下的真实提交内,commit的名称很长,通常我们只需要写前面8位即可
$ git tag stable-1 8c315325

# 查看当前所有tag
$ git tag
stable-1

这样,我们可以用stable-1 作为提交 8c315325 的代称。

前面这样创建的是一个“轻量级标签”。

如果你想为一个tag添加注释,或是为它添加一个签名, 那么我们就需要创建一个 “标签对象”。

标签对象

git tag 中使用 -a, -s 或是 -u三个参数中任意一个,都会创建一个标签对象,并且需要一个标签消息(tag message)来为 tag 添加注释。 如果没有 -m 或是 -F 这些参数,命令执行时会启动一个编辑器来让用户输入标签消息。

当这样的一条命令执行后,一个新的对象被添加到 Git 对象库中,并且标签引用就指向了一个标签对象,而不是指向一个提交,这就是与轻量级标签的区别。

下面是一个创建标签对象的例子:

$ git tag -a stable-2 8c315325 -m "stable 2"
$ git tag
stable-1
stable-2

接下来…

后面的教程比较难且用到不多,最近先不研究啦~

参考

[1] 实验楼Git实战教程



Gitstudy Share Tweet +1