git基础知识
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用户名
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
三者都可以完成合并并提交新功能,但是日志记录会有差异 如:前两者版本记录中会出现合并,而第三种可以保证版本记录干净整洁
多人协作的工作模式:
首先,可以试图用 git push origin branch-name 推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;
如果合并有冲突,则解决冲突.并在本地提交;
没有冲突或者解决掉冲突后,再用 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基础知识的更多相关文章
- Git基础知识与常用命令
一:相关概念: 1:工作区(Working Directory): 就是你在电脑里能看到的目录 2:版本库(Repository): 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. ...
- git基础知识总结
1,clone git clone https://github.com/KoMiles/helloword helloword 2,pull git pull 3,commit git commit ...
- git 基础知识
git 分布式版本控制系统 git三棵树: 工作目录 红色 等待添加到暂存区域 需执行git add filename 命令添加到暂存区 暂存区域 绿色 文件等待被提交 需执行 git commit ...
- git下的团队合作模型及git基础知识汇集
https://www.atlassian.com/git/tutorials/syncing/git-fetch Syncing svn使用单个中央库来作为开发者之间沟通的桥梁,而协同合作是通过在开 ...
- Git基础知识 —— 获取Git仓库
前言 官方提供了两种获取Git仓库的方法,第一种是在本地现有项目目录下导入所有文件到Git中,第二种就是从Git仓库中clone项目到本地 这里就不说Git的安装了哈,有需要的小伙伴可以查看该博文:h ...
- Git基础知识之内部状态管理系统
本文主要来介绍一下 Git 的内部状态管理系统.它利用基于节点和指针的数据结构来跟踪及管理编辑操作的时间线. 对本地项目而言,任一时刻,Git 处于三种状态中的一种:工作区状态.暂存区状态和提交区状态 ...
- Git基础及进阶-系统总结
Git基础及进阶-系统总结 by 小强 2019-07-01 考虑到入职后不仅需要熟练掌握git的基本使用,在企业实际操作中还涉及一些进阶指令.作为一个程序员,熟练使用工具是一项基本技能,也是程序员的 ...
- 【Git 系列】基础知识全集
Git 是一种分布式版本控制系统,它可以不受网络连接的限制,加上其它众多优点,目前已经成为程序开发人员做项目版本管理时的首选,非开发人员也可以用 Git 来做自己的文档版本管理工具. 一.Git 基础 ...
- 学习 git基础命令
缘起 年后到了新公司,由于个人意愿到了一个海外的项目组,除了自己从Java技术栈转了C#技术栈外,很多技术都是第一次使用,学习压力不小啊. 自己也就先从常用的技术开始学起,比如C#,AngularJS ...
随机推荐
- MTK 自定义按键添加广播
一.给自定义按键添加广播 修改PhoneWindowManager.java中的interceptKeyBeforeDispatching方法 /frameworks/base/policy/src/ ...
- Qt编写echart仪表盘JS交互程序支持webkit和webengine(开源)
Echart是百度研发团队开发的一款报表视图JS插件,功能十分强大,是本人用过的国产作品中最牛逼的,记得四五年前就在qt中使用过,当时用的浏览器控件是webkit,由于5.6以后的版本不再支持webk ...
- RandomForest中的feature_importance
随机森林算法(RandomForest)的输出有一个变量是 feature_importances_ ,翻译过来是 特征重要性,具体含义是什么,这里试着解释一下. 参考官网和其他资料可以发现,RF可以 ...
- java注解和反射学习
spring框架很多地方都应用了注解,如@controller,所以要学会自定义注解及注解处理器. Class<?> cl=Class.froName(className) //通过类名加 ...
- xss攻击问题以及如何防范
当用户提交评论的时候,比如如下评论内容 111 <scripy>alert(111);</scripy> 这样当现实评论的时候会先弹出111弹框,再显示评论.这就是xss攻击. ...
- CentOS7.5 Linux搭建全文检索--Solr7.4.0单机服务
一.Solr安装环境 1.官方参考文档 Solr教程参考指南:http://lucene.apache.org/solr/guide/7_4/solr-tutorial.html 2.Solr运行环境 ...
- 架构师如何借鉴他人经验快速成长? | 2018GIAC上海站日程上线!
随着网络技术的迅猛发展,越来越多的企业需要紧跟技术发展潮流以应对层出不穷的业务场景变化.如今多“语言”开发百花齐放,选择何种语言才能在合适的场景中发挥最大价值?互联网业务架构经过了长年的发展,已然朝着 ...
- vue进阶用法-深入响应式原理
异步更新队列 当vue异步执行更新DOM时,只要观察到数据变化,vue经开启一个队列,并缓冲在同一时间循环中发生的所有数据改变.如果同一个watch被多次触发,只会一次推入到队列中.然后在下一个事件循 ...
- .NET Core开发日志——从ASP.NET Core Module到KestrelServer
ASP.NET Core程序现在变得如同控制台(Console)程序一般,同样通过Main方法启动整个应用.而Main方法要做的事情很简单,创建一个WebHostBuilder类,调用其Build方法 ...
- 关于linux下安装并打开网易云音乐——v 1.0.0
首先,在网易云音乐官网的下载页面下载linux版本网易云音乐安装包(.deb文件) 下载好之后,在下载文件夹中双击打开文件,等待安装完毕 安装完成之后,直接双击图标是打不开的 需要用管理员命令打开 c ...