Git的两大功能

1.协作开发

2.版本控制

版本库

版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”.

所以,创建一个版本库非常简单    首先,选择一个合适的地方,创建一个空目录:

1. mkdir  git_project

2. cd git_project

3. git init

瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了

2.把文件添加到版本库

所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

HEAD变量指向git当前管理的版本,可以通过不断改变HEAD的指向来回滚到之前提交过的任何版本

git代码一旦提交到代码仓库,即使文件被删除也能被恢复过来.只有文件添加在暂存区中才可能被彻底删除

Git文件版本管理命令

  • git init,初始化,表示即将对当前文件夹进行版本控制。
  • git status,查看Git当前状态,如:那些文件被修改过、那些文件还未提交到版本库等。
  • git add 文件名,将指定文件添加到版本库的暂存状态。
  • git commit -m '提交信息',将暂存区的文件提交到版本库的分支 如果当前在master就提交到master,在dev就会提交到dev分支
  • git log,查看提交记录,即:历史版本记录
  • git reflog    记录你的每一次命令
  • git reset --hard 0972f4b    回滚到指定提交版本

Stage(暂存)区

1.比如一个大功能需要修改100个文件,但是其中一个小的功能优先级比较高,需要先上线,但是这个功能只需要修改10个文件.这个时候可以先把这10个文件从工作区中添加到stage区中然后再把10个文件提交到代码仓库中.

2.工作区的修改撤销

git checkout -- readme.md     把readme.md文件在工作区的修改全部撤,这里有两种情况:

1.一种是readme.md自修改后还没有被放到暂存区        现在撤销修改就回到和版本库一模一样的状态

2.一种是readme.md已经添加到暂存区后又作了修改    现在撤销修改就回到添加到暂存区后的状态

总之,就是让这个文件回到最近一次git commit  或git  add 时的状态

3.暂存区的修改撤销

1. git reset HEAD readme.md            git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区.当我们用HEAD时,表示最新的版本

2. git checkout -- readme.md             丢弃工作区的修改

4.查看git工作区和暂存区的状态    git status 会把暂存区和工作区的变化都展示出来

1.上部分显示的是暂存区状态

2.下部分显示的是工作区状态

Git分支策略

master分支     是不能在上面做开发的,必须是稳定的版本  默认仅有一个名为master的分支

dev分支          相当于测试环境的版本分支

创建一个新的分支 拷贝一份当前所在的分支代码到新的分支

这样每个人push的代码既不会影响到master分支也不会影响到其他人创建的分支.每个分支能影响到master分支仅仅在合并分支的时候

当我们需要临时解决一个bug的时候也是需要通过创建一个新的分支来修改代码,解决bug后再和master分支合并,然后再切换到自己的开发分支

git  checkout -b   branch1               创建一个属于自己的分支

开发代码

git  add .                                          将修改文件添加到本地版本库的暂存区中

git  commit -m "说明"                      将暂存区的内容提交到本地当前的分支branch1中

git    checkout   master                    切换回master分支

git   merge   branch1                        将branch1分支上的内容合并到master分支  必须是在master分支上合并其它分支的代码,而不能在其它分支上合并master代码

Git stash

stash用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区

  • git stash             将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
  • git stash list        查看“某个地方”存储的所有记录
  • git stash clear     清空“某个地方”
  • git stash pop       将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
  • git stash apply     编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)
  • git stash drop      编号,删除指定编号的记录

使用场景

stash方案

vim    app01/views.py                                                     # 开发某个新功能,刚开发到一半

git stash                                                                           # 将开发到一半的新功能,临时存储到“某个地方”

vim    pondo/settings.py                                                   # 紧急修复bug

git add .                                                                            # 添加到修改bug的代码到暂存状态

git  commit  -m  '紧急修复bug'                                          # 提交修复Bug的代码到分支

git stash pop                                                                     # 将开发到一半的功能从“某个地方”再次拿到工作区继续开发

分支解决方案:

git  branch                                                                   # 当前在master分支

git branch dev                                                             # 创建dev分支用于开发新功能

git checkout dev                                                           # 切换到dev分支

vim app01/views.py                                                     # 开发新功能到一半,需要紧急修复Bug

git add .

git commit -m '新功能开发一半'

git checkout master                                                     # 切换回master分支

git branch bug                                                             # 创建bug分支

git checkout bug                                                         # 切换到bug分支

vim pondo/settings.py                                                # 修改bug

git add .                                                                        # 提交bug

git commit -m '紧急修复bug'                                        # 提交bug

git checkout master                                                     # 切换回master

git merge bug                                                              # 将bug分支合并到master分支,表示bug修复完毕,可以上线

git checkout dev                                                         # 切换到dev分支,继续开发新功能

vim app01/views.py                                                   # 继续开发其他一半功能

git add .                                                                      # 提交新功能

git commit -m '继续开发完成'                                      # 提交功能

git checkout master                                                    # 切换回master分支

git merge dev                                                             # 将dev分支合并到master分支

Git和Github实现远程代码托管

将本地Git管理代码推送到github远程仓库

git remote add origin https://github.com/aaa/pondo.git                       # 为地址起一个别名origin

git push origin master                                                                         # 将本地master分支内容推送到GitHub

Username for 'https://github.com':                                                  # 输入GitHub用户名

           Password for 'https://aa@github.com':                                           # 输入GitHub密码
        git push origin dev                                                                             # 将本地dev分支内容以及版本信息推送到GitHub
 
新电脑第一次使用,需要将代码从GitHub中获取并继续开发
      git clone https://github.com/aaa/pondo.git                                           # 将项目从GitHub中获取
      cd      pondo/

      git Branch                                                                                            # 默认获取到得只有master分支
     * master
 
      git branch dev origin/dev                                                                    # 创建dev分支且和远程dev分支同步
      git checkout dev                                                                                 # 切换到dev分支
      vim app01/views.py                                                                            # 继续开发新功能
      git add .                                                                                              # 添加文件到版本库的暂存状态
      git commit -m '公司开发功能1'                                                           # 提交新功能到版本库的分支
     git push origin dev                                                                              # 提交dev分支内容到远程GitHub托管仓库的dev分支
 
 
第二次使用电脑开发
    git checkout dev                                                                             # 切换到dev分支
    git fetch origin dev                                                                         # 从GitHub仓库获取dev分支最新内容到版本库的分支
    git merge origin/dev                                                                       # 将版本库的分支内容合并到工作区
    获取dev分支方法2:
   【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】
    git pull origin dev                                                                              # 从GitHub仓库获取dev分支最新内容,并合并到本地
    vim app01/views.py                                                                          # 继续开发新功能
    git add .                                                                                            # 添加文件到版本库的暂存状态
    git commit -m 'xxxxxxxxxxx'                                                             # 提交新功能到版本库的分支
    git push origin dev                                                                           # 提交dev分支内容到远程GitHub托管仓库的dev分支
  
  

Github多人协作冲突解决方法

  • 先 git pull origin master   然后 git push origin master
  • 先 git fetch origin master 然后 git merge origin/master   再  git push origin master
  • 先 git fetch origin master 然后 git rebase origin/master  再  git push origin master

三者都可以完成合并并提交新功能,但是日志记录会有差异  如:前两者版本记录中会出现合并,而第三种可以保证版本记录干净整洁

多人协作的工作模式:

  1. 首先,可以试图用 git push origin branch-name 推送自己的修改;

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;

  3. 如果合并有冲突,则解决冲突.并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用 git push origin branch-name 推送就能成功!

如果git pull 提示"no tracking information",则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name

Git忽略特殊文件

在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件.最后一步就是把.gitignore也提交到Git版本库

Git提交指定的单个文件

1.一次修改了多个文件 但是只需要提交指定的文件

2.git add templates/appconf/cachemgr.html     //提交到暂存区

git stash -u -k      //忽略其他,关键一步

git status            //可以看到只有一个文件需要commit

3.git  commit   -m    '提交说明'     //提交暂存区

4.git push  推送提交到远程仓库

5.查看git远程仓库

只提交了一个html文件到远程仓库

git基础知识的更多相关文章

  1. Git基础知识与常用命令

    一:相关概念: 1:工作区(Working Directory): 就是你在电脑里能看到的目录 2:版本库(Repository): 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. ...

  2. git基础知识总结

    1,clone git clone https://github.com/KoMiles/helloword helloword 2,pull git pull 3,commit git commit ...

  3. git 基础知识

    git 分布式版本控制系统 git三棵树: 工作目录 红色 等待添加到暂存区域 需执行git add filename 命令添加到暂存区 暂存区域 绿色 文件等待被提交 需执行 git commit ...

  4. git下的团队合作模型及git基础知识汇集

    https://www.atlassian.com/git/tutorials/syncing/git-fetch Syncing svn使用单个中央库来作为开发者之间沟通的桥梁,而协同合作是通过在开 ...

  5. Git基础知识 —— 获取Git仓库

    前言 官方提供了两种获取Git仓库的方法,第一种是在本地现有项目目录下导入所有文件到Git中,第二种就是从Git仓库中clone项目到本地 这里就不说Git的安装了哈,有需要的小伙伴可以查看该博文:h ...

  6. Git基础知识之内部状态管理系统

    本文主要来介绍一下 Git 的内部状态管理系统.它利用基于节点和指针的数据结构来跟踪及管理编辑操作的时间线. 对本地项目而言,任一时刻,Git 处于三种状态中的一种:工作区状态.暂存区状态和提交区状态 ...

  7. Git基础及进阶-系统总结

    Git基础及进阶-系统总结 by 小强 2019-07-01 考虑到入职后不仅需要熟练掌握git的基本使用,在企业实际操作中还涉及一些进阶指令.作为一个程序员,熟练使用工具是一项基本技能,也是程序员的 ...

  8. 【Git 系列】基础知识全集

    Git 是一种分布式版本控制系统,它可以不受网络连接的限制,加上其它众多优点,目前已经成为程序开发人员做项目版本管理时的首选,非开发人员也可以用 Git 来做自己的文档版本管理工具. 一.Git 基础 ...

  9. 学习 git基础命令

    缘起 年后到了新公司,由于个人意愿到了一个海外的项目组,除了自己从Java技术栈转了C#技术栈外,很多技术都是第一次使用,学习压力不小啊. 自己也就先从常用的技术开始学起,比如C#,AngularJS ...

随机推荐

  1. Android异步处理系列文章四篇之四 AsyncTask的实现原理

    Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Loope ...

  2. [Math] Unconstrained & Constrained Optimization

    粘贴两个典型的例子,只是基础内容,帮助理解. (1) Solution: (2) Solution:

  3. Android样式的开发:selector篇

    上一篇详细讲了shape的用法,讲解了怎么用shape自定义矩形.圆形.线形和环形,以及有哪些需要注意的地方.不过,shape只能定义单一的形状,而实际应用中,很多地方比如按钮.Tab.ListIte ...

  4. asp.net mvc 3.0 知识点整理 ----- (4).asp.net mvc 3 和asp.net mvc 4 对比

    asp.net mvc的版本更新很快,每个版本都在前一个版本的基础上,进行性能的优化和功能的完善和提升. 以下,便是我对比了下两个版本,发现最基本的差异.(更新补充中..) 一.关于配置类Global ...

  5. Python实现C代码统计工具(四)

    目录 Python实现C代码统计工具(四) 标签: Python 计时 持久化 声明 运行测试环境 一. 自定义计时函数 1.1 整个程序计时 1.2 代码片段计时 1.3 单条语句计时 二. 性能优 ...

  6. linux升级内核

  7. Nordic NRF51822 从零开始系列(外部设备片—MPU6050DMP驱动的移植)

    一.硬件准备             (1)开发板和软件参看 Nordic NRF51822 从零开始系列(一)开发环境的搭建             (2)mpu6050模块 二.前置知识     ...

  8. 如何将MP3录音转文字

    相信很多人都有电话录音的习惯,因为这样可以记录下很多重要的信息.那么当我们通过录音将一些重要的信息记录下来后,我们应该怎样将这些录音文件转换成文字进行记录呢?下面我们就一起来看一下吧. 操作步骤: 步 ...

  9. STL的基本介绍

    STL是标准模板库,现在是c++的一部分 STL被组织为下面的17个头文件:<algorithm>.<deque>.<functional>.<iterato ...

  10. css学习_css盒模型及应用

    1.看透网页布局的本质 2.盒模型 margin.border.padding.width.height a. border: 1px solid red                (solid/ ...