致谢:

非常感谢 [猴子老师] : https://backlog.com/git-tutorial/cn/intro/intro1_1.html

 

安装git

在 Ubuntu 这类 Debian 体系的系统上,可以用 apt-get 安装:

sudo apt-get install git

建立本地库

在要建库的文件夹下打开终端,
建立库:将文件夹初始化为库

git init

添加该目录下所有文件和文件夹,注意add和.之间的空格

git add .

或者添加单个文件

git add sample.txt

可以查看索引缓存状态,是否有文件带提交,该命令也是使用最频繁的指令,哪一步没有把握时都可以先查看一下:

此时应该显示有文件待提交

git status

添加说明,否则commit无效.

git commit -m "first commit"

查看日志:

git log

到此,本地库就建立了,并且添加了文件.

push到远程库

 

添加远程库:remote

命令格式:git remote add <name> <url>

关于name:

执行推送或者拉取的时候,如果省略了远程数据库的名称,则默认使用名为”origin“的远程数据库。因此一般都会把远程数据库命名为origin。

关于url:

格式是 https://[your_space_id].backlogtool.com/git/[your_project_key]/tutorial.git

是个网址,结尾是.git

举例如下:

git remote add origin http://git.oschia.net/xxx/***.git

push更改内容到远程数据库

命令格式: git push <repository> <refspec>

<repository>: 远程数据库目录名称,

<refspec>:远程数据库分支。

举例如下:

git push -u origin master

表示推送到远程origin数据库的master分支

-u: 

当执行命令时,如果您指定了-u选项,那么下一次推送时就可以省略分支名称了。但是,首次运行指令向空的远程数据库推送时,必须指定远程数据库名称和分支名称。

此时终端窗口会提示输入用户名和密码.即远程git端的登录名和密码.这个自己要记得.

 

 Git push常用指令

        在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了。

    git push的一般形式:

 

git push <远程主机名>  <本地分支名>:  <远程分支名> 

例如 git push origin HEAD:refs/for/master ,即是将本地的master分支推送到远程主机origin上的HEAD分支(当前分支), origin 是远程主机名,

[

这些不对:

 git push <远程主机名>  <本地分支名>:  <远程分支名> 

例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名。

第一个master是本地分支名,第二个master是远程分支名。

]

为什么本地主机名不需要指定?因为是无关项。

push前,可以先看一下分支,便于简写指令。

查看当前本地分支:

xx@xx:git branch  

master

* test

对应的远程分支,

xx@xx:git branch -r

remotes/origin/HEAD -> origin/master

remotes/origin/br-2.1.2.1

同时查看本地分支和远程分支:

xx@xx:git branch -a

master

* test

remotes/origin/HEAD -> origin/master

remotes/origin/br-2.1.2.1

前面带*号:代表你当前本地工作目录所处的分支

HEAD:代表你当前远程工作目录所处的分支

 

    1.1 git push origin master

        如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建

     1.2 git push origin :refs/for/master 

  如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master

    1.3 git push origin

   如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支 

 1.4 git push

  如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名

 1.5 git push 的其他命令

  这几个常见的用法已足以满足我们日常开发的使用了,还有几个扩展的用法,如下:

    (1) git push -u origin master 如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push,

      不带任何参数的git push,默认只推送当前分支,这叫做simple方式,还有一种matching方式,会推送所有有对应的远程分支的本地分支, Git 2.0之前默认使用matching,现在改为simple方式

      如果想更改设置,可以使用git config命令。git config --global push.default matching OR git config --global push.default simple;可以使用git config -l 查看配置

    (2) git push --all origin 当遇到这种情况就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要 -all 选项

    (3) git push --force origin git push的时候需要本地先git pull更新到跟服务器版本一致,如果本地版本库比远程服务器上的低,那么一般会提示你git pull更新,如果一定要提交,那么可以使用这个命令。

    (4) git push origin --tags //git push 的时候不会推送分支,如果一定要推送标签的话那么可以使用这个命令

 1.6 关于 refs/for

  // refs/for 的意义在于我们提交代码到服务器之后是需要经过code review 之后才能进行merge的,而refs/heads 不需要

 

从远程数据库pull

进行拉取(Pull) 操作,就是从远程数据库下载最近的变更日志,并覆盖自己本地数据库的相关内容。

Clone远程数据库

克隆后的本地数据库的变更履历也会被复制,所以可以像原始的数据库一样进行查看记录或其他操作。

git pull和git clone的区别

一、git pull命令用于取回远程主机某个分支的更新与本地的指定分支合并。

二、git clone是把整个git项目拷贝下来,包括里面的日志信息,git项目里的分支,你也可以直接切换、使用里面的分支等等

 

常见故障

提示remote origin already exists.

则:

git remote rm origin //更新远程连接

然后重新remote并push

fatal: unable to access 'https://xxx/***.git/': Could not resolve host: gitee.com

1) 原因1: https不识别

适应http和https

git config --global http.sslVerify false //http和https的什么转换

再push 

2)网速不好

网速慢连接超时了,多试几次

 

执行pull时提示  ! [已拒绝]          master     -> master  (非快进式)

[ 跳过:

执行如下指令时报错:

git pull origin master:master

快进式,指远程库是本地库的历史版本,不含有本地库之外的修改.

非快进式:指远程库有其他同事或网页端或其他端做了改动,出现了本地库之外的更改,二者不同步.

]

执行如下代码:

git pull origin master

1) 执行git commit -a

会跳出提示需要键入commit原因.

是VI方式操作.  

按”i”进入输入模式,随便输入个什么,然后

a)然后 esc,直接输入”:wq”你会发现这个出现在终端的最下面,这是OK的,最后 enter,就OK了。

b)或者根据终端最下面的提示"ctrl+*"也可以.当出现是否保存选择y,n时,输入y并直接回车.

[此时再次执行git pull origin master:master,仍然会提示非快进式,不要理他]

然后再执行push.顺利通过了.

2)如果提示:

***

自动合并失败,修正冲突然后提交修正的结果。

表示在被修改的文件的相同的位置,远程库和本地库修改方法不一样.git会将这两种修改该方法都合并到被修改的文件里.

此时也可以提交,但是结果会有这些不理想的合并.

因此根据"自动合并失败"这条信息之前的具体内容[有文件名称], 打开被修改的文件.

删除其中一个不需要的合并.此时即可提交.执行如下命令:

git add .

git commit -m "merge"

git push -u origin master

输入用户名/密码,提交完成.

 

git log如何退出

英文状态下按Q

 

进阶

如何优雅的commit

简单使用Commitizen-规范你的commit message

Commitizen的安装和使用

 

 

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐