Git学习

近期学习了一下git,主要参照廖雪峰老师的git教程,以下是我的学习心得:

1、简介

  • 版本控制系统

2、安装

  • 从 git 官网上下载 https://git-scm.com/downloads
  • 安装后,打开 git Bash 命令。(也说明安装成功)
  • 安装后需要进行设置
    • git config --global user.name “Your name”
    • git config --global user.email “Your email”
      –global 这个参数表示这台机器上所有的 GIT 仓库都会使用这个配置,也可以对某个仓库指定不同的用户名和Email地址

3、创建版本库

  • 简单理解成一个目录,这个目录里所有的文件都可以被 GIT 管理起来,每个文件的修改、删除、GIT都能跟踪,或者在将来某个时刻可以“还原”
  • 步骤:
    • 创建空目录
      $ mkdir learngit
      $ cd learngit
      $ pwd // pwd 用于显示当前目录
    • 把目录变成 GIT 可以管理的仓库
      $ git init
      // 当前目录下多了一个 .git 目录,如果没有说明目录默认隐藏,用ls -ah 可以看见
    • 把文件添加到暂存区、把暂存区的内容提交到分支
      • git add //把文件添加到仓库
        • git add . //添加全部文件
      • git commit -m //把文件提交到分支,-m是注释。commit只提交暂存区的内容,即如果没有git add则不会被提交
    • 连接到远程仓库
      • 提前在github中新建一个仓库
      • 连接远程仓库
      • 把本地项目推送到远程仓库
        • git push -u origin master //由于远程库是空的,第一次推送master分支时,加上了-u参数,git 不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令

4、修改文件

  • 修改后文件可以用git status查看当前状态
  • git diff 查看具体修改了哪些内容
  • 接着同之前一样
    • git add .
    • git commit -m “备注”
    • git push origin master

5、版本回退

  • 回退上一个版本
    • git reset --hard HEAD^ // head指向的版本就是当前版本,因此,git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
  • 可以用git log查看提交历史,里面有commit_id,以便确定回退到哪个版本
  • 要重返未来,可以用git reflog查看历史命令,以便确定要回到未来的哪个版本

6、撤销修改

  • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file
    git checkout 其实使用版本库里的版本替换工作区的版本,无论是修改还是删除,都可以’一键还原’
  • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git checkout – file,就回到了场景1,第二步按场景1操作
  • 已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

7、删除文件

已经提交到暂存区的文件,在本地删除了。

  • 场景1:确实要从版本库中删除该文件
    • 用命令git rm test.txt删除版本库中该文件
    • 并且git commit -m “remove test.txt”
  • 场景2:删错了。要恢复
    • git checkout – test.txt

8、克隆仓库

9、分支创建与合并分支

1、意义:

  • 多人合作一个项目,你可以创建一个属于自己的分支,别人看不到,还继续在原来的分支上工作,而你在自己的分支上工作,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

2、操作:

  • 创建dev分支,然后切换到dev分支
    • git checkout -b dev // -b表示创建并切换,相当于以下两条命令
      • git branch dev // 创建分支
      • git checkout dev // 切换分支
  • 用git branch命令查看当前分支
    • 当前分支前面会标一个 * 号
  • 然后就可以操作文件并在dev分支上正常提交
    • dev分支的工作完成,就可以切换回master分支。此时,刚才操作的内容不见了,因为提交是在dev分支上的,而不是master分支
  • 将dev分支的内容合并到master分支上
    • git merge dev // git merge命令用于合并指定分支到当前分支
  • 合并完成后就可以删除dev分支了
    • git branch -d dev

// 因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

10、解决冲突

  • 发生冲突的情形:
    • 在featurel分支上修改了文件a并提交,切换至master分支同样修改了文件a并提交,此时,若想执行操作git merge featurel想合并分支,则会发生冲突
  • git status查看冲突文件
  • 直接查看冲突的文件,并手动合并两次修改的内容
  • 再执行git add .和git commit -m ""操作进行提交
  • 此时可以删除featurel分支了(git branch -d featurel)

11、分支管理策略

  • 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
  • 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
    • git merge --no–ff -m “禁用” dev

12、存储工作现场

  • git stash // 把当前的工作现场“储藏”起来,等以后恢复现场后继续工作
  • 恢复工作现场
    • 第一种:git stash apply恢复,但是恢复后,stash内容并不删除,需要通过git stash drop来删除
    • 第二种:git stash pop,恢复的同时把stash内容也删除了
  • 恢复的时候可以先git stash list查看储藏列表,并可以恢复指定的stash
    • git stash apply stash@{0}

13、多人协作

  • 查看远程库信息 git remote
  • 查看远程库详细信息 git remote -v
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
  • 多人工作模式
    • 首先,可以试图用git push origin 推送自己的修改;
    • 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
    • 如果合并有冲突,则解决冲突,并在本地提交;
    • 没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
      如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。

14、标签管理

  • 意义:发布一个版本时,我们通常在版本库中打一个标签,这样就确定了打标签时刻的版本。标签就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起

1、创建标签

  • 创建标签(默认在当前分支上)
    • git tag v1.0
  • 创建标签(在指定的commit上)
    • git log --pretty=oneline --abbrev-commit -> 找到历史的commit id
    • git tag v0.5 f54242 // 打在特定的commit上
  • 创建带有说明的标签
    • git tag -a v1.0 -m “version 1.0” 1094adfg // -a用于指定标签名,-m用于指定说明文字

2、查看标签

  • 查看所有标签
    • git tag
  • 查看标签信息
    • git show v0.5
      标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

3、删除标签

  • 从本地删除(未推送到远程)
    • git tag -d v0.1
  • 已经推送到远程,删除标签
    • 先从本地删除 git tag -d v0.5
    • 从远程删除 git push origin :refs/tags/v0.5

4、推送标签到远程

  • git push origin v1.0
  • git push origin --tags // 一次推送全部尚未推送到远程的本地标签
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值