Git分布式版本控制工具

一、安装Git

   1、下载Windows版的Git:msysgit;官方下载地址:http://msysgit.github.io,安装选定要安装的目录(路径杜绝中文),剩下的按照默认安装即可,参考:GIt安装教程 。

   2、安装完成后,在开始菜单里找到“Git”->“Git Bash”,弹出一个类似命令行的窗口;或是在CMD命令提示符下,输入git回车可以看到很多提示,就说明Git安装成功!

   3、初始化目录 生成隐藏文件 .git 负责版本的保存

[email protected] MINGW64 /c/guotianbao
$ git init
Initialized empty Git repository in C:/guotianbao/.git/

   4、安装完成后,因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址,在命令行输入:  

[email protected] MINGW64 /c/guotianbao (master)
$ git config --local user.name ‘guotianbao‘

[email protected] MINGW64 /c/guotianbao (master)
$ git config --local user.email ‘[email protected]‘

二、常用命令

1.基本命令

-1.查看状态

$ git status //查看工作区状态
$ git diff //若git status提示有文件被修改,则可执行此命令查看修改的内容

执行git status命令会看到两部分,上边是文件提交的暂存区,下边是文件所在的工作区;在当前工作区,而没有提交到暂存区的文件颜色是红色的,提交到暂存区的文件是绿色的,如果工作台面是干净的话,证明所有文件已提交到仓库。

-2.提交数据

$ git add .                     #提交所有文件
$ git commit -m "自定义提交信息"  #提交注释

$ git add . 把文件从工作区提交到暂存区

$ git commit 把暂存区的所有内容提交到当前分支(仓库)

-3.查看文件信息

$ git ls-tree head   #查看版本(分支)中所有的文件
$ git ls-files -s    #查看暂存区和版本中所有文件的详细信息
$ git ls-files       #仅查看所有的文件名

-4.查看所有日志

$ git log    //显示操作日志
$ git log  --pretty=oneline //显示精简信息
$ git reflog //查看所有的日志

-5.回滚版本

#方式一: (三步操作)
    $ git reset --soft 版本号  #从分支回到暂存区
    $ git reset head 文件      #从暂存区回到修改过的内容
    $ git check out  文件      #从修改过的文件到原文件
#方式二: (两部步操作)
    $ git reset --mix 版本号   #从分支回到修改过的内容 == git reset 版本号
    $ git check out  文件      #从修改过的文件到原文件
#方式三: (一部步操作)
    $ git reset --hard 版本号  #从分支回到原文件

-6.删除文件

$ git rm test.txt
$ git commit -m "remove test.txt"  
2. 场景案例模拟

示例一:

1.  创建msg.py 写入短信功能代码并提交到分支

[email protected] MINGW64 /c/guotianbao (master)
$ git add .

[email protected] MINGW64 /c/guotianbao (master)
$ git commit -m ‘开发短信功能‘
[master (root-commit) 99afeac] 开发短信功能
 1 file changed, 1 insertion(+)
 create mode 100644 msg.py

2.回滚到无短信功能的版本

[email protected] MINGW64 /c/guotianbao (master)
$ git log
commit 99afeacb8e856c7c4fd66cde1d633923703775f7 (HEAD -> master)
Author: guotianbao <[email protected]>
Date:   Sat Nov 4 08:09:18 2017 +0800

    开发短信功能

[email protected] MINGW64 /c/guotianbao (master)
$ git reset --hard 99afeacb8e856c7c4fd66cde1d633923703775f7
HEAD is now at 99afeac 开发短信功能

3.直接再次回滚到有短信功能的版本

[email protected] MINGW64 /c/guotianbao (master)
$ git reflog
99afeac (HEAD -> master) [email protected]{0}: reset: moving to 99afeacb8e856c7c4fd66cde1d633923703775f7
39b29ba [email protected]{1}: commit: 增加aaa
99afeac (HEAD -> master) [email protected]{2}: reset: moving to 99afeacb8e856c7c4fd66cde1d633923703775f7
99afeac (HEAD -> master) [email protected]{3}: commit (initial): 开发短信功能

[email protected] MINGW64 /c/guotianbao (master)
$ git reset --mix 39b29ba
Unstaged changes after reset:
M       msg.py

[email protected] MINGW64 /c/guotianbao (master)
$ git checkout msg.py

# 底下两部操作等于 git reset --hard 版本号
    git reset --mix 版本号
    git checkout 文件名

示例二:

stash 将工作区做的所有修改(做到一半的操作)保存到一个临时地方  

#- 正在写代码(a.txt),发现线上代码(a.txt)有bug,先把现在代码保存到临时空间
#- 修改完bug(a.txt)提交,再次取回之前保存的文件,这时发现之前保存的代码和提交的bug是同一个文件,有冲突
#- 这时(a.txt)中两者都保留,手动保留想要的代码,再次提交

#临时保存现在写的代码
git stash  

#去修改出现bug再次提交
bug....# 解决bug的过程
git add .
git status
git commit -m "修改完bug"
git status

#切回之前保存的状态 git stash pop
  -如果修改的文件和保存的文件是同一个文件,则此文件中会保留两者的代码,需手动改回自己需要的代码
  - 如果不是同一个文件,则直接提交
git stash pop
git add .
git status
git commit -m "bug上又一次修改"

具体过程

3.分支  
dev     #负责开发新功能
bug     #负责修复线上的bug
master  #线上代码

###分支

#dev分支
    git branch       #查看所有分支
      * master       #前面有*号代表是当前分支

    git branch dev   #创建dev分支

    git branch       #查看所有分支
        dev
      * master       #前面有型号代表是当前分支

    git checkout dev #切换到dev分支

    git branch
      * dev          #当前分支
        master

#bug分支
    git branch bug   #给master创建一个bug分支
    git branch       #查看当前分支
        bug
        dev
      * master       #当前所在分支

    git checkout bug #切换到bug分支
    git branch
      * bug
        dev
        master

#修改完bug 把bug分支和master合并
    git checkout master #切换到master分支,然后合并bug分支
    git merge bug

# 删除分支
    git branch -d bug   #只删除完成合并之后的dev分支
    git branch -D bug   #强制删除dev分支

创建、合并、删除分支

4.远程仓库

  由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要如下设置:

  第1步:创建SSH Key。在用户主目录下(例如:C:\Users\Administrator\),看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key: 

$ ssh-keygen.exe //创建SSH key 【公钥和私钥,连接省却了用户名密码的输入】git窗口下,直接执行ssh-keygen.exe,默认往下执行,然后把公钥复制到github上

  如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
  第2步:登陆GitHub,打开“settings”,“SSH and GPG Keys ”页面,然后,点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,最后点击“Add Key”按钮完成。
  说明:为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。当然,GitHub允许你添加多个Key。
  假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。  

添加远程仓库

  1、登录GitHub网站,并按网站要求创建一个新的仓库;

  2、根据GitHub网站提示,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

  3、本地仓库与GitHub上相应的仓库建立关联,代码如下:([email protected]:tianbaoo/test.git为我新建的仓库路径)

$ git remote add origin [email protected]:tianbaoo/test.git

  添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

  4、把本地库的内容推送到远程库上,用git push命令,实际是把当前分支master推送到远程。

$ git push -u origin master

  由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令(不用带-u参数)。当然也可以不写!就需要你手动输入yes
  当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告,这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。  

  5、通过GitHub上的仓库来克隆出新的本地仓库(可以在任意一个文件夹下,建议最好在一个固定的盘下方便于管理),要克隆一个仓库,首先必须知道仓库的地址,然后使用 git clone命令克隆从远程库克隆到本地(说白了就是下载版本库)。代码如下:  

$ git clone [email protected]:tianbaoo/test.git //应用场景:切换办公地点:家和公司,第一次都能从远程库上克隆然后进行开发!

注意点:执行clone命令,实质上内部已经完成了初始化git库和本地与远程库连接的过程(内部config文件,已写好命名,同时远程库名字默认为origin)!

  也许还注意到,GitHub给出的地址不止一个,还可以用 https://github.com/zh605929205/LearnGit.git 这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

本地和远程仓库

#本地代码推送到远程仓库
git remote add origin [email protected]:tianbaoo/test.git  #设置远程仓库并设置别名origin
git checkout master       #把当前分支切换到master分支
git push origin master    #推送到master分支

#从远程仓库拉代码
git clone [email protected]:tianbaoo/test.git
cd test/
git branch          #只下载master分支
    #* master
git branch  -a      #查看所有分支 有远程的分支
    * master
      remotes/origin/HEAD -> origin/master
      remotes/origin/dev
      remotes/origin/master
git branch dev origin/dev       #拉远程分支的代码
git branch
        dev
    *  master

常用命令

现实场景:

  在公司进行开发代码,代码没有写完,想要回家加班继续写,然后应该把公司的代码push到服务器上

$ git remote add origin https://github.com/tianbaoo/test.git #给自己的远程库起origin别名

$ git checkout master     # 切换到master分支
$ git push origin master  # 把master分支推送到GitHub上

  回到家以后先把代码clone下来,进行修改后,再push到远程仓库上

$ git clone https://github.com/tianbaoo/test.git #去GitHub上把代码复制下来

$ cd test/ #进入test文件夹

$ git branch dev origin/dev #创建一个跟远程仓库同名的dev分支
$ git checkout dev          #切换到dev分支下

#写代码. . .
	. . .
	. . .

$ git add .                       #加到暂存区
$ git commit -m ‘自定义提交信息‘  #加到分支
$ git push origin dev             #把dev分支提交到远程仓库orgin

公司:
    git checkout dev
    #选其中一个
    git fetch origin dev    #从远程拉到本地的仓库 还需要 git reset --hard 文件
    git pull origin dev     #从远程拉到原文件

    #----------提交成功完成-----------
    功能11
        git add .
        git commit ...
        git push origin dev
    #----------忘记提交,下班回家-------
    功能12:
        git add .
        git commit ...
        git push origin dev
回家:
    git branch dev
    git pull origin dev
    功能13:
        git add .
        git commit ...
        git push origin dev

#现在处于功能12没有提交的状态
#先拉代码查看功能13和功能12是否有冲突,如果有冲突,手动修改 不能直接提交
公司:
    获取代码,
        git pull origin dev

        无冲突:过
        有冲突:
            手动解决
            git add .
            git commit -m ‘解决冲突‘

后续

git工作的一般流程:http://blog.csdn.net/javyzheng/article/details/50311175

参考资料:Git开发 、 廖雪峰 、 武老师

  

    

  

 

  

  

  

 

  

时间: 2024-07-30 23:17:48

Git分布式版本控制工具的相关文章

it入门之:学会使用Git 分布式版本控制工具

环境:window 工具:git & TortoiseGit 下载安装以及配置环境变量 :略略略 创建Github账户:登录https://github.com/用自己的常用邮箱创建账户,用来管理自己的代码 打开Git-bash 输入: ssh-keygen -t rsa -C "[email protected]" #连续三次回车,默认:/c/Users/Administrator/.ssh · 在c盘,当前用户文件夹下,有个.ssh 文件夹,在里边 找到 id_rsa.pu

开源分布式版本控制工具 —— Git 之旅

转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-tourofgit/ Git 主张的分布式代码库与文件快照的设计思想,相对于传统 CVS.SVN 等集中式.文件差异式版本控制工具是一种挑战与颠覆.Git 带来了离线提交.轻量级分支等诸多便利.不过,也有人质疑 Git 的复杂性,并由此拔高了学习成本,某种程序上影响了开发者使用或者迁移 Git 的项目进度,笔者同样感同身受,这也是本文的出发点. 不同于各种 Git 用法指南,本文在介

Git 分布式版本控制 -- (2、远程仓库)

上周断断续续好几个爬虫出问题,今天统计了以下十多个爬虫停止工作了.这下有事情做了.今天看了Prada的官网,改版好严重,连价格取值都成get https json了.好在排版什么的还是挺不错的. 继续接上次把,Git分布式版本控制.火车票: http://my.oschina.net/lpe234/blog/342963 或者直接看原文.确实很适合入门了解学习: http://www.liaoxuefeng.com/ 擦,静不下心来~~ 有空在整理吧

Git分布式版本控制教程

Git分布式版本控制 Git 安装配置 Linux&Unix平台 Debian/Ubuntu $ apt-get install git Fedora $ yum install git (up to Fedora 21) $ dnf install git (Fedora 22 and later) Gentoo $ emerge --ask --verbose dev-vcs/git Arch Linux $ pacman -S git openSUSE $ zypper install g

Git 分布式版本控制的常见命令

Git 的作用:  (1)方便多人协同开发; (2)方便版本控制 Git 分布式版本控制的主要区域及命令图,下面会详细讲解: 创建项目并将切换至项目目录下 1. 创建本地仓库:  git init   此命令会在根目录下创建 .git的隐藏文件,为本地的代码仓库 2. 配置个人信息 :  git config user.name"张三" git config user.email"[email protected]"    此命令设置提交的姓名和邮箱,若不设置的话会

分布式版本控制工具Git

一.Git技术简介 Git是一个分布式版本控制系统,与集中式的SVN不同. 1. 主要特点 集中式特点: 所有人的资源全部保存在中央服务器. 所有人开发前都需要从中央服务器上下载同步其他人的代码才能继续开发,慢. 中央服务器一旦数据丢失,意味着所有数据全部丢失. 分布式特点: 每个人的电脑都是一个完整的版本库 每个人修改完毕之后,会将资源发送至其他每个同事的电脑. 如果个人电脑数据丢失,随便从其他人那里复制一份即可. 二.Git环境搭建 1.下载Git客户端 https://git-scm.co

Git分布式版本控制(安装和配置)

版本控制 简介 你可以把一个版本控制系统(VCS)理解为一个"数据库",在需要的时候,它可以帮你完整地保存一个项目的快照.当你需要查看一个之前的快照(称之为"版本")时,版本控制系统可以显示出当前版本与上一个版本之间的所有改动的细节.版本控制系统主要分为两种,集中式版本控制和分布式版本控制.CVS和SVN就是典型的集中式版本控制系统,而Git是目前世界上最先进的分布式版本控制系统. 集中式版本控制 集中式版本控制的仓库是集中存放在中央服务器的,而干活的时候,用的都是

GIT&amp;GITHUB 版本控制工具

01 GIT: 分布式版本控制:SVN: 集中式版本控制 [03]功能 系统修改:数据备份:版本管理(版本快照):权限限制:历史记录:分支管理: 版本控制方式: 集中式:单点故障,最大的问题 分布式:每个本地有完整的历史存储,可以避免单点故障 [05] GIT 的优势 1. 大部分在本地完成,不需要联网 2. 完整性保证: 3. 优先添加数据,而不是删除修改数据,方便恢复历史数据 4. 分支操作流畅快捷 [06] GIT 安装 1. 安装目录:非中文,且没有空格,否则可能受到干扰 enable

Git分布式版本控制

一.常见的版本管理工具有 SVN 集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库挂了或者不可访问,所有的使用者无法使用SVN,无法进行提交或者备份文件 Git 分布式的版本控制系统,在每个使用者电脑就有一个完整的数据仓库,没有网络依然可以使git,当然为了习惯团队协作,会将本地数据同步到git服务器或者GitHub等代码仓库 二.Git介绍 Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git的三种重要模式,分别是已提交.已修改.已暂存 已提交