Git学习笔记

本篇博客内容大部分整理自廖雪峰的git教程,是本人对该教程的一个学习总结,列出了一些Git的常用知识点,多去运用这些知识点才能熟练掌握,结合github的使用可以为自己管理项目和代码带来极大的方便。

1 Git简介

1.1 Git是什么

Git是Linux之父Linus为方便管理Linux项目以及Linux社区贡献者提交代码而写的一个非常流行的分布式版本控制系统。

1.2 Git和github的关系

github相当于是一个远程的代码仓库,它为开源项目免费提供git存储

1.3 版本控制系统:集中式vs分布式

  • 集中式版本控制系统(CVS,SVN等):版本库集中存放在中央服务器上
  • 分布式版本控制系统(Git等):无“中央服务器”概念,每台电脑都是一个完整的版本库。多人协作通过相互推送修改实现(借助github作为平台推送更为方便)

2 Git常用命令图解

这里写图片描述
图片来源:常用Git命令清单-阮一峰的网络日志

几个专用名词译名如下:

  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库

3 创建版本库

  1. 创建本地仓库:git init
  2. 将文件添加到暂存区:git add file
  3. 把暂存区的文件提交到仓库:git commit -m "提交说明"

4 时光穿梭机

4.1 工作区和版本库

这里写图片描述
图片来源:廖雪峰的git教程

4.2 版本回退

  • 查看提交历史(含commit_id)git log [--pretty=oneline] ,其中[]里面的为可选命令,--pretty=oneline 表示以简化的方式显示提交历史
  • 执行回退:HEAD指向的版本就是当前版本,使用git reset --hard commit_id命令可回退至其它版本
  • 重返未来:通过git reflog 查看命令历史找到未来版本的commit_id(git log只能查看当前版本时间点以前的历史版本)

4.3 管理修改

  1. 查看工作区的状态(以文件和文件夹的形式显示): git status
  2. 查看修改
    git diff 显示的是工作区(你电脑中看得到的仓库目录及文件)和暂存区的差别,以红色-号显示的是相比于后者增加的内容,以蓝色+号显示的是相比于后者删除的内容。
    git diff --cached 显示的是暂存区和master分支间的差别
    git diff HEAD 显示的则是工作区和分支间的差别

注意:在工作区的修改,如果不add到暂存区,commit时就不会被提交

4.4 撤销修改

  • 场景1:丢弃工作区的修改(未添加到暂存区) git checkout -- file
  • 场景2:丢弃已添加到暂存区的修改 先用git reset HEAD file 回到场景1(相当于用本地仓库的file版本重置暂存区的对应file)
  • 场景3:已提交不合适的修改到版本库,利用版本回退撤销本次提交

4.4 删除文件

git rm file(删除并自动提交到暂存区)

注:在利用git命令操作文件时,如文件比较多,操作时可以多个文件并列或使用通配符,如git add file1 file2 ...git add file*

5 远程仓库

5.1 添加远程仓库

  1. 在远程仓库如github上新建一个空的仓库
  2. 关联远程仓库:git remote add origin git@server-name:path/repo-name.git
  3. 推送到远程仓库:git push [-u] origin master(第一次推送要在push后加'-u')

5.2 从远程仓库克隆

git clone [url] (url是远程仓库项目的地址)

6 分支管理

Git鼓励使用分支管理

6.1 创建与合并分支

  • 查看分支:git branch
  • 创建分支:git branch [name]
  • 切换分支:git checkout [name]
  • 创建+切换分支:git checkout -b [name]
  • 合并某分支到当前分支:git merge [name](默认使用Fast-forward方式(直接把master指向待合并分支的当前提交)合并,合并后的历史没有分支;加上–no-ff参数可以用普通方式合并,合并后的历史有分支)
  • 删除分支:git branch -d [name]

6.2 解决冲突

当Git无法自动合并分支时,就必须首先解决冲突。办法是利用git status查看是哪个文件发生了冲突(多半是对该文件的修改不一致引起的),然后对该文件发生冲突的地方(git会用<<<>>> 标示出来)手动进行修改。解决冲突后,再提交,完成合并。

查看分支合并图:git log --graph [--pretty=oneline --abbrev-commit]

6.3 分支管理策略

团队合作的分支图如下所示:
这里写图片描述
1. 稳定的master分支,仅用来发布新版本
2. 不稳定的dev分支用于平时干活(活干好后再合并到master上去)
3. 协作者在各自的分支上进行开发

6.4 Bug分支

  • 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除Bug分支
  • 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后再git stash pop,回到工作现场

6.5 Feature分支

  • 开发一个新的feature,最好新建一个分支
  • 如果要丢弃一个没有被合并过的分支,可以通过git branch -D [name]强行删除

6.6 多人协作

  • 查看远程库信息:git remove -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的
  • 利用git进行多人协作的工作模式:
    1.首先试图用git push origin branch_name推送自己的修改
    2.如果推送失败,说明远程分支比你的本地分支更新,需先用git pull抓取远程的新提交
    3.如果git pull 后提示”no tracking information”,说明两个分支的链接没有创建,用命令git branch --set-upstream branch_name origin/branch_name 为两个分支创建链接,然后再次git pull
    4.如果git pull成功(会自动进行分支合并),但合并有冲突,则解决冲突(参照6.2),并在本地提交
    5.没有冲突或解决掉冲突后,再用git push origin branch_name推送

7 标签管理

标签管理相当于给commit_id起有意义的别名

7.1 创建标签

git tag [name](默认为HEAD,也可指定一个commit_id)

7.2 操作标签

  • 推送本地标签:git push origin [tagname]
  • 删除本地标签:git tag -d [tagname]
  • 删除远程标签:git push origin: refs/tags/[tagname]

参考资料:

  1. 廖雪峰的git教程
  2. 常用Git命令清单-阮一峰的网络日志
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值