一、Git简介
       Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。

图为git开发过程:

1、Git的功能特性

从一般开发者的角度来看,git有以下功能:

  • 从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
  • 在自己的机器上根据不同的开发目的,创建分支,修改代码。
  • 在单机上自己创建的分支上提交代码。
  • 在单机上合并分支。
  • 把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
  • 生成补丁(patch),把补丁发送给主开发者。
  • 看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
  • 一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。

从主开发者的角度看,git有以下功能:

  • 查看邮件或者通过其它方式查看一般开发者的提交状态。
  • 打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
  • 向公共服务器提交结果,然后通知所有开发人员。

2、优点

  • 适合分布式开发,强调个体。
  • 公共服务器压力和数据量都不会太大。
  • 速度快、灵活。
  • 任意两个开发者之间可以很容易的解决冲突。
  • 离线工作。

3、缺点

  • 资料少(起码中文资料很少)。
  • 学习周期相对而言比较长。
  • 不符合常规思维。
  • 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

二、操作
git客户端安装:https://git-scm.com/

1、安装查看客户端版本:

C:\Users\xp>git --version
git version 2.14.1.windows.1

2、配置昵称,用于更新版本跟踪

2.1、配置昵称,git bash执行如下命令:

git config --global user.name "xiaoping"
git config --global user.email "xiaoping@163.com"

通过 git config -l 这个命令查看已配置的用户名和邮箱信息

git config -l

2.2、生成密钥对

打开git bash,输入命令一路回车

ssh-keygen -t rsa -C "xiaoping@163.com"

3、从远端克隆工程

git clone git账户@xx.xx.xx.xx:仓库地址。

git clone git@127.0.0.1:data/test.git

4、pull与push操作

4.1.从远程仓库dev上更新代码:git pull <远程主机> <远程分支名>:<本地分支名>

E:\workspace\git_test>git pull origin dev:master
remote: Counting objects: 17, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 9 (delta 3), reused 0 (delta 0)
Unpacking objects: 100% (9/9), done.
From 123.206.51.64:data/git_test
5218488..e28fd78 dev -> master
* [new branch] dev -> origin/dev
warning: fetch updated the current branch head.
fast-forwarding your working tree from
commit 521848830e57c8ae1f45cccb5fd91dd2de077c5b.
Already up-to-date.

4.2.本地提交代码到远程仓库dev分支上

查看状态

E:\git_workspace\demo>git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage) modified: demo/src/main/java/com/exception/EmsException.java

提交步骤1:

E:\git_workspace\demo>git add .

提交步骤2:

E:\git_workspace\demo>git commit -m "提交说明信息,必须要写"
[master 34ecceb] 提交说明信息,必须要写
1 file changed, 3 insertions(+), 1 deletion(-)

提交步骤3:git push <远程主机名> <本地分支名>:<远程分支名>

E:\test\git_test>git push origin master:dev

Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (9/9), 615 bytes | 307.00 KiB/s, done.
Total 9 (delta 3), reused 0 (delta 0)
To 123.206.51.64:data/git_test.git
5218488..e28fd78 master -> dev

如果你记不住push与pull 远程分支名和本地分支名的顺序,可以设置git push和pull的默认分支:git branch --set-upstream-to=origin/<远程分支名> <本地分支名>

D:\workspace\demo>git branch --set-upstream-to=origin/dev master
Branch master set up to track remote branch dev from origin.

这样我就设置了我本地master分支push与pull的默认远程分支是dev。

5、管理员远程仓库的操作
5.1.创建仓库git init
    这部操作完,只要一个.git的隐藏文件,这时是一空的仓库。使用git branch是看不到任何分支的
5.2.创建一个本地工程push到远程仓库上, 这时你会发现报错了。

remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To 127.0.0.1:data/git_test.git
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'git@127.0.0.1:data/git_test.git'

原因:这是由于git默认拒绝了push操作,需要进行设置,修改.git/config文件后面添加如下代码:

[receive]
denyCurrentBranch = ignore

操作完成功提交之后,你在远程仓库上输入 git branch你会看到一个*master。这时master分支就有了

5.3. 创建一个dev分支:

git branch dev(创建dev)/git checkout -b dev(创建并切换到dev)

5.4.远程仓库不能让开发者随意push,所以删掉2.中添加到.git/config中的内容

5.5.分支合并到master

[root@t2 demo.git]# pwd
/home/git/data/demo.git
[root@t2 demo.git]#

查看当前所在分支

[root@t2 demo.git]# git branch
* dev
master
[root@t2 demo.git]#

如果不在切换到master分支

[root@t2 demo.git]# git checkout master
Switched to branch 'master'
[root@t2 demo.git]# git branch
dev
* master
[root@t2 demo.git]#

将分支合并到master分支

[root@t2 demo.git]# git merge dev
Updating 1b85a27..1d471fe
Fast-forward
demo/.mvn/wrapper/maven-wrapper.jar | Bin 47610 -> 0 bytes
demo/.mvn/wrapper/maven-wrapper.properties | 1 -
demo/mvnw | 225 ---------------------
demo/mvnw.cmd | 143 -------------
.../demo/Controller/TestController.java | 15 ++
5 files changed, 15 insertions(+), 369 deletions(-)
delete mode 100644 demo/.mvn/wrapper/maven-wrapper.jar
delete mode 100644 demo/.mvn/wrapper/maven-wrapper.properties
delete mode 100644 demo/mvnw
delete mode 100644 demo/mvnw.cmd
create mode 100644 demo/src/main/java/com/Controller/TestController.java
[root@t2 demo.git]#

  

三、多人协作(pull报错)
       当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。

要查看远程库的信息,用git remote:

git remote
origin

用git remote -v显示更详细的信息:

git remote -v
origin git@github.com:xiaoping/test.git (fetch)
origin git@github.com:xiaoping/test.git (push)

在往远程push失败,报错:

git push origin dev
To github.com:xiaoping/test.git
! [rejected] dev -> dev (non-fast-forward)
error: failed to push some refs to 'git@github.com:xiaoping/test.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Git已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送:

git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details. git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=origin/<branch> dev

如果pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:

git branch --set-upstream-to=origin/dev dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.

再次pull:

git pull
Auto-merging env.txt
CONFLICT (add/add): Merge conflict in env.txt
Automatic merge failed; fix conflicts and then commit the result

这回pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后,提交,再push:

git push origin dev
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 621 bytes | 621.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To github.com:xiaoping/test.git
7a5e5dd..57c53ab dev -> dev

  

 推荐学习一下:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

简单的git使用命令的更多相关文章

  1. Git操作简单入门及相关命令

    说明:本文内容主要来自文末参考链接内容,此文仅作学习记录.如有转载,请到文末参考链接处. 1 基本概念理解 1.1 Git介绍 Git是分布式版本控制系统. 集中式VS分布式,SVN VS Git. ...

  2. Git 常用命令详解

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...

  3. Git常用命令总结

    Git常用命令总结 git init      在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹.   git clone ...

  4. git config命令使用

    1. git config简介 我们知道config是配置的意思,那么git config命令就是对git进行一些配置.而配置一般都是写在配置文件里面,那么git的配置文件在哪里呢?互动一下,先问下大 ...

  5. 傻瓜看完都可以简单使用Git

    作为当下最流行的版本控制系统,Git是一个分布式版本控制系统,跟SVN等集中式版本控制有很多使用上的不同.万事开头难,想要最快学会使用Git,最简单的就是下了客户端就直接去用,一边用一边学.本文手把手 ...

  6. Git / 程序员需要知道的12个Git高级命令

    众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强 ...

  7. 解决git pull 命令失效,不能从远程服务器上拉取代码问题

    用时候在用Git pull命令的时候不管用,拉取不下来远程分支上的代码,是因为本地分支和远程分支没有建立关联. 处理这种问题很简单就按照提示执行命令即可:git branch --set-upstre ...

  8. git checkout 命令详解

    转自:http://www.cnblogs.com/hutaoer/archive/2013/05/07/git_checkout.html?utm_source=tuicool&utm_me ...

  9. 转收藏:Git常用命令速查表

    一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...

  10. Git 常用命令详解(二)

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...

随机推荐

  1. springboot实现邮箱发送(激活码)功能

    第一步:现在邮箱里面开启smtp服务 这里用163邮箱举例,配置一下授权密码,这个要提前记住 第二步:引入依赖 <?xml version="1.0" encoding=&q ...

  2. [ABC281F] Xor Minimization

    div class="part"> Problem Statement You are given a sequence of non-negative integers $ ...

  3. 切换容器引擎为containerd

    确保模块载入: # 永久生效 cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter E ...

  4. 华企盾DSC服务器无法启动常见处理方法

    先查看<服务问题判断>文档.常见的 1.授权已经过期--需延长授权 2.ERR_BASE64 – 机器码变更 3.不能在该计算机上使用该数据库,需要解锁才可以--打开服务器配置解锁数据库 ...

  5. Kernel Memory 入门系列:文档的管理

    Kernel Memory 入门系列: 文档的管理 在Quick Start中我们了解到如何快速直接地上传文档.当时实际中,往往会面临更多的问题,例如文档如何更新,如何划定查询范围等等.这里我们将详细 ...

  6. dotnet-dump工具使用

    介绍 dotnet-dump 是 .NET Core 官方工具之一,用于生成和分析 .NET Core 进程的转储文件(dump file).它可以帮助开发人员在应用程序发生故障或性能问题时进行故障排 ...

  7. Centos7 Zabbix3.2安装(yum)

    http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/  #官网下载地址(只包含zabbix的应用包) ftp://47.104.78.123/zabbix/ ...

  8. MongoDB的CRUD操作(入门)

    MongoDB的简单介绍: 1:MongoDB是什么? mongodb是非关系数据库 但是是非关系数据库当中功能最丰富,最像关系数据库的 MongoDB是一个基于分布式文件存储的数据库. 由C++语言 ...

  9. (转)Harbor 启用镜像扫描功能方法

    A demo environment with the latest Harbor stable build installed. For additional information please ...

  10. Cesium案例解析(七)——Layers在线地图服务

    目录 1. 概述 2. 案例 2.1. Blue Marble 2.2. ArcGIS地形 2.3. Cesium地形 2.4. Natural Earth II 2.5. Earth at Nigh ...