Git入门学习

  • git config --global : 用这个参数表示这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址

  • 版本库 : 又名仓库 repository


创建版本库

  • 第一步:创建空目录
  • 第二步:通过git init 命令将次目录变成Git可以管理的仓库
    • git init
  • 注 :此时会发现多了一个.git 目录,此目录用来管理版本库。
将文件加入仓库
  • 第一步:用命令git add告诉Git,把文件添加到仓库
  • 第二步:用命令git commit 告诉Git,把文件提交到仓库

  • git log命令的说明

    • 参数:--pretty=oneline 简化日志记录为1行


Git版本回退

  • HEAD 表示分支的当前版本,上一个版本为HEAD^ ,上上个版本为HEAD^^
  • 上一百个版本为HEAD~100
  • 回退命令 : git reset
    • git reset --hard HEAD^
返回刚才回退的版本
  • 通过git reflog命令找到之前执行过的命令记录
  • 找到之前提交commit命令的commit id 例如下:
    • 3628164 HEAD@{1}: commit: append GPL


工作区和暂存区

  • 工作区:Working Directory 电脑中可以看到的目录,比如之前建的learngit
  • 版本库:工作区中的隐藏目录.git既是Git的版本库

    • 暂存区:stage。命令add就是把文件修改添加到暂存区
    • 第一个分支master,指向master的指针HEAD。命令commit 就是把暂存区的所有内容提交到当前分支。

    工作区与版本库


撤销修改

准备提交修改时
  • git checkout -- <file> 命令:丢弃工作区的修改
    • git checkout -- readme.txt
  • 此时有两种情况:
    • 一、readme.txt没有被放到暂存区,此时撤销修改就回到 和版本库一模一样的状态
    • 二、readme.txt 已经添加到暂存区 后又经过修改,此时撤销修改就回到了添加到暂存区后的状态。


修改提交到暂存区时
  • 通过命令git reset HEAD file 可以把暂存区的修改撤销掉(unstage),重新放回工作区
    • eg:git reset HEAD readme.txt
    • 注: git reset 既可以回退版本,也可以把暂存区的修改会退到工作区HEAD表示最新的版本


文件删除

目录中文件已删除,git中更新确认
  • 1、 git rm test.txt
  • 2、git commit -m "remove test.txt
误删文件,需要恢复到最新版本
  • git checkout -- test.txt
  • 注:这里git checkout用版本库里的版本替换工作区的版本。


仓库管理

配置SSH Key
生成公钥
  • 通过命令ssh-keygen -t rsa -C "youremail@example.com" 之后一路回车即可在C:\Users\Administrator\.ssh 目录下生成两个文件id_rsaid_rsa.pub
在Coding.net中添加公钥
  • 复制id_rsa.pub中的全部内容,添加到账户->SSH公钥页面中,钥名称可以随意起名字。


添加远程库
  • 情况说明 : 本地已经创建了一个Git仓库,想在Coding.net上创建一个Git仓库,并且让这两个仓库进行远程同步。

  • 第一步:在coding上创建一个新的项目,并获取改项目的ssh地址

    • 例如:git@git.coding.net:lutianfei/Gitxxx.git
  • 第二步 :在本地的对应仓库下输入命令:
    • git remote add origin git@git.coding.net:lutianfei/Gitxxx.git
    • 注:这里origin是远程项目的别名,但一般都将origin默认为远程项目名。
  • 第三步:将本地库的内容推送到远程库中
    • git push -u origin master
    • 这里实际上是把当前分支master 推送到远程
    • 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
    • 之后就可以简化命令为git push origin master,把本地master分支的最新修改推送至Coding
  • 第四步:获取远程库有但是本地库没有的信息git fetch origin


克隆远程库
  • 对于一个已经存在的远程库,需要拷贝到本地可以使用git clone命令。
    • git clone git@git.coding.net:lutianfei/Gitxxx.git


分支管理

  • HEAD表示指向当前的分支。
  • 由下图可知,Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!
    创建分支的指针变化
快进模式合并分支
  • 创建并切换到dev分支
    • git checkout -b dev:相当于下面的两条命令:
      • git branch dev
      • git checkout dev
  • 查看当前分支git branch
  • dev分支的工作成果合成到master分支上
    • 第一步:切换回master分支
    • 第二步:合并分支 git merge dev :将指定分支合并到当前工作分支中
    • 第三步:删除分支git branch -d dev
  • 如果不需要快速合并模式可以如下命令:
    • git merge --no-ff -m "version description" dev


普通分支合并
  • 分支合并之前,最好使用 git pullmaster 分支的代码更新到最新
  • 如果我们在合并之前对 master 分支和 dev 分支都做了一些修改,那合并时就不会像快进合并那么简单了。

  • 此时分支状态如下

  • 这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突
  • 查看readme.txt的内容:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
>=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

  • Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,
  • ======= 隔开的上半部分,是 HEAD(即 master 分支,在运行 merge 命令时的工作分支)中的内容,下半部分是在 dev 分支中的内容。
  • 在文档中将冲突部分修改后再重新add commit即可。
  • 此时分支情况如下:
    这里写图片描述

  • 通过git log --graph命令可以看到分支合并图。


BUG分支处理
  • 在Git中,每个bug都可以通过一个新的临时分支来修复,修复后合并分支,然后将临时分支删除。
  • 第一步: 当需要处理一个紧急bug时,
    • 首先可以先将当前工作现场保存通过git stash命令
  • 第二步:此时工作区就是干净的,可以创建分支来修复bug。
    • 首先,确定在哪个分支上修复bug,例如要在master分支上修复
      • git checkout master
      • git checkout -b bug_branch
    • 其次 修复bug并通过addcommit提交到bug分支。
    • 最后 切换回master分支,合并bug_branch分支,删除bug分支。
  • 第三步,恢复到之前的工作现场
    • 首先:查看储存列表git stash list
    • 其次 :恢复工作环境git stash pop
      • 如果用git stash apply恢复,还需要git stash drop将恢复的环境在stash中删除。
      • 也可以用git stash apply stash@{x}来恢复具体的某个环境。


Feature 分支处理
  • 当添加一个新功能时,肯定不希望因为一些实验性质的代码,把主分支搞乱。所以,每添加一个新功能,最好新建一个feature分支,在这个分支上面开发,完成后合并,删除该feature分支。
  • 第一步:创建分支 git checkout -b feature-t
  • 第二步:开发分支功能,结束后add,commit提交到分支。
  • 第三步:切回dev分支,合并feature分支
    • git checkout dev
    • git merge feature-t
  • 当feature分支不需要上线,要销毁时,可用如下命令
    • git branch -d feature-t , 系统提示此时因feature分支未合并如删除会丢失修改。可通过下面强制删除
    • git branch -D feature-t


分支管理策略
  • 合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
  • 强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

  • 不使用Fast forward模式,merge后就像这样
    这里写图片描述


分支管理基本原则
  • 首先master分支应该是非常稳定的,也就是仅用来发布新版本,平时不在上面干活;

  • 干活都在dev分支上,也就是说,dev分支是不稳定

    • 比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
  • 每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

这里写图片描述


标签管理

创建标签
  • 首先,切换到需要打标签的分支git checkout master
  • 然后,通过如下命令创建新标签

    • git tag v1.0
    • 查看所有标签:git tag
  • 默认情况下标签是打在最新提交的commit上的,如果想在之前的版本上打标签

    • 首先 找到历史提交的commit id
      • git log --pretty-oneline --abbrev-commit
    • 然后 找到对应的commit id 对其打上标签
      • git tag v0.9 6222333
  • 通过git show <tagname>可以看到说明文字


操作标签
  • 删除标签git tag -d v1.0
  • 推送某个标签到远程库:git push origin <tagname>
  • 推送所有标签到远程库:git push origin --tags
  • 从远程库删除标签
    • 第一步:从本地删除:git tag -d v1.0
    • 第二步:从远程删除:git push origin :refs/tags/v1.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值