zoukankan      html  css  js  c++  java
  • git和github的基本使用(1)

    简介

    • svn是集中式版本控制,git是分布式版本控制
    • 为什么需要版本控制?
      • 版本控制,记录某个历史的状态,然后根据某个历史状态进行处理,比如回退某个版本;
      • 团队协作时,可以使用版本控制来记录不同人对文件的操作
    • 集中式版本控制:文件和版本信息是存储在服务端,如果服务端宕机的话会出现历史数据丢失的问题(即单点故障问题)
    • 分布式版本控制:本地、服务器都可以记录版本历史,可以避免单点故障问题。

    团队内部协作

    1. 项目经理在"代码托管中心"(比如:github)中创建一个仓库,然后将自己本机的仓库push过去
    2. 程序员就可以通过"代码托管中心"获取仓库中的代码、然后提交自己的代码(不过这个过程需要项目经理授权才可以操作)
    3. 项目经理和其他程序员可以通过"代码托管中心"获取仓库中的代码

    跨团队协作

    项目经理安排了一项内容给程序员A,但是程序员A不知道如何处理,想找程序员B帮忙,程序员B则需要先复制项目(fork)、然后下拉到本地(clone)、然后提交自己的代码(push)、然后通过“远程仓库”的pull request给项目经理的仓库,项目经理对提交的代码进行合并,然后项目经理程序员A就可以通过pull下拉代码。比如:linux系统开源,如果使用过程中遇到问题可以向项目提供修复的代码,然后等待项目审核人进行审核

    git相关命令

    本地库初始化

    git init
    
    • 生成.git目录,记录本地库的相关信息,不要动

    本地库配置

    作用:配置开发人员的身份信息,方便在后续向“代码管理中心”提交内容时记录谁去提交

    局部配置

    仅当前项目有效

    配置用户名和email信息

    git config user.name maomao1
    git config user.email maomao1@qq.com
    

    查看配置

    # 方式1 
    cat .git/config
    # 方式2:git config --get name值
    git config --get user.name
    

    全局配置

    为本机进行配置

    配置用户名和email信息

    git config --global user.name maomao2
    git config --global user.email maomao2@qq.com
    

    查看配置

    cat ~/.gitconfig
    

    基本命令

    • 查看工作区、暂存区状态
    git status
    
    • 将文件添加到暂存区
    git add hello.txt
    
    • 从暂存区撤销回到工作区
    git rm --cached hello.txt
    
    • 将文件从暂存区提交到本地仓库
    # 进入vim编辑器进行提交文件说明
    git commit hello.txt
    
    # 不进入vim编辑器进行提交文件说明
    git commit -m "add hello.txt"
    
    • 查看版本历史记录

    如果版本历史记录很多的话,可以按空格向下翻页;按b向上翻页;

    q退出

    # 方式1
    git log
    # 方式2,简化显示版本历史记录、并使用长的hash值
    git log --pretty=oneline
    # 方式3,简化显示版本历史记录、并使用短的hash值
    git log --oneline
    # 方式4,HEAD@{移动到当前版本需要多少步}
    git reflog
    
    • 查看具体命令的使用
    # 语法:git help 具体的命令
    git help reset
    

    git reset命令参数

    git reset --soft 124de7c
    
    • 使用--soft参数,本地库的指针发生变化,但是文件区和暂存区的指针不会发生变化
    • 使用--mixed,文件的内容不会变化,但是暂存区和本地库会同时移动指针,而工作区不移动指针

    比较文件

    git diff aa.txt   # 将工作区和暂存区中的文件内容差异,如果删除则使用`-`,如果新增则使用`+`
    git diff HEAD aa.txt    #和本地库中的HEAD进行比较。可以和本地库的某个版本进行比较
    git diff HEAD  #比较暂存区和本地库中有文件差异的内容
    

    分支

    • 默认创建的分支是master分支,在新增功能、修复bug等不想影响原有的master分支,所以我们需要另外创建一个新的分支来进行工作
    • 一般分支名我们会起名为feature_xx;针对bug处理的分支,一般命名为hot_fix
    • 分支的好处:可以进行多个功能的开发,相互独立,互不影响;
    # 查看所有分支
    git branch -v 
    
    # 创建分支
    git branch hot_fix
    
    # 切换分支
    git checkout hot_fix
    

    情景1:合并分支不产生冲突的情况下

    创建hot_fix分支修复master分支中的bug

    # 创建分支,并切换到对应的分支下
    git branch hot_fix
    git checkout hot_fix
    
    # bug修复,并提交到本地库
    vi hello.txt
    git add hello.txt
    git commit -m "fix hello.txt"
    
    # 切换到master分支,将hot_fix分支的内容合并到当前分支
    git checkout master
    git merge hot_fix 
    

    情景2:合并分支产生冲突

    什么情况下会产生冲突?当修改同一个文件的同一行时

    # hot_fix分支上修改aa.txt第N行的内容
    git branch hot_fix
    vi aa.txt
    git add aa.txt
    git commit -m "update aa.txt by hot_fix"
    
    # 切换到master分支修改aa.txt第N行的内容
    git branch master
    vi aa.txt
    git add aa.txt
    git commit -m "update aa.txt by master"
    
    # 尝试合并分支
    git checkout hot_fix
    git merge master   
    # 冲突代码调整,然后重新提交到本地库
    vim aa.txt   
    git add aa.txt
    git commit -m "resolve confict"    注意:这里不能带有文件名
    

    注意:

    • 分支合并遇到报错时,命令行的分支名会变为"xx|yyy"这种形式
    • 分支冲突后,冲突的文件会在冲突的地方会有标记,我们需要对冲突的地方进行代码的调整。因为git不知道怎么做处理

    应用场景

    工作区文件添加到本地仓库

    git add hello.txt
    git commit -m "add hello.txt"
    

    版本回退或前进

    版本控制是由HEAD指针进行控制

    方式1:基于索引值操作【推荐】

    # 语法:git reset --hard 索引值
    git reset --hard 124de7c
    

    注意:

    • git log --pretty=onelinegit log --oneline只会记录当前版本之前的历史版本记录(即只显示历史,不显示将来)
    • git loggit reflog可以记录当前版本之前或者后的历史版本记录

    方式2:使用^符号,这种只能进行版本后退

    # 回退到上一个版本
    git reset --hard HEAD^
    

    注意:HEAD后面有多少个^,就回退多少个版本

    方式3:使用~符号,回退指定个数的版本

    # 回退到前两个版本
    git reset --hard HEAD~2
    

    方式4:使用@{n}来回退或者前进到某个版本

    git reflog
    git reset --hard HEAD@{5}
    

    删除文件后找回

    删除文件

    git rm a.txt
    
    • 如果已经提交到本地库,则使用git reset --hard 指定的版本回退删除文件前的一个版本。

    • 如果还未提交到本地库,则使用git reset --hard HEAD更新当前工作区、暂存区、本地库的指针,这样本次修改则无效

  • 相关阅读:
    hdu 3854 Glorious Array(一般)
    sublime常用设置以及使用技巧
    windows下通过bat脚本调用sql脚本
    数据库操作之间的校验以及常见操作
    oracle linux、centos、redhat7配置网易云的yum源
    redhat,centos、oracle linux配置本地yum源
    查询触发器及其相关的触发器函数与表
    postgresql触发器
    root用户ssh可以登录,xftp通过sftp不能登录链接CentOS解决办法
    PG数据库中表所占用空间大小查询
  • 原文地址:https://www.cnblogs.com/it774274680/p/15095314.html
Copyright © 2011-2022 走看看