git试免费的开源的分布式版本控制系统,github是一个用git做版本控制的项目托管平台。说白了git就是帮忙你管理你开发的代码,代码每次修改的历史,多人更好的一起开发项目。

分布式版本控制系统,每个人电脑上都有一个完整的版本库,工作不需要联网,多人协作只需要把你修改的发给中央服务器(其实可以没有),别人从中央服务器下载你修改的内容即可。

git里面文件存储格式设置为utf8,整个目录请用英文名。

版本库(Repository)

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

设置捏的git账户  git config --global user.name "Your Name"

git config --global user.email "email@example.com"

linux基本操作

  更改操作目录  cd e/learngit/

  创建一个文件夹 mkdir learngit

  查看文件内容 cat filename

  修改文件内容 vi  filename 进入文件 i 编辑 esc :wq保存退出 :q退出

初始化一个Git仓库 git init (将一个文件夹编程git库)

添加与提交

  添加更改的文件到暂存区 git add <filename>,注意,可反复多次使用,添加多个文件;

  将暂存区的文件提交到本地git库 git commit -m "beizhu"

查看日志与不同

  查看git状态 git status  这个可以告诉我们对git做了哪些操,比如增删改,然后我们好做添加和提交

  看具体文件修改了什么 git diff filename (默认和暂存区比较)

  工作区和版本库的文件的区别 git diff HEAD -- 文件名

  提交的内容日志 git log -- pretty = oneline  (都提交了什么)

  git 操作日志 git reflog (可以看commitid什么的)

提交与恢复文件

  恢复基本操作

    提交之后想恢复到之前的版本 git reset --hard HEAD^ ( HEAD^ 是之前一个版本, HEAD^^是之前两个版本 HEAD~100之前100个版本)

    根据commiitid恢复到未来最版本   git reset --hard 7a363a0

  我的文件还没有git add 提交到暂存区恢复到和版本库一样 我可以 git checkout -- filename

  我的文件已经git add 提交到暂存区 我要先 git reset HEAD filename ,再进行上一步操作

  如果源文件已经提交了版本,你可以根据之前说的恢复上一个版本 git reset --hard HEAD

删除与恢复

  删除文件(linux)  rm filename   恢复删除的文件 git checkout --filename

  确定要删除文件(git) git rm filename 想恢复 git reset HEAD filename

创建SSH Key    ssh-keygen -t rsa -C "youremail@example.com"  一路y,可以在用户主目录(一般是C:\Users\Administrator)里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

将本地git库(有文件的项目)上传到github里的方法:

  第1步:创建SSH Key ①本地已经有的直接用 ②没有用这个命令创建ssh-keygen -t rsa -C "youremail@example.com"

  第2步:GitHub上添加SSH KEY,登陆GitHub,打开“Account settings”,“SSH Keys”页面

  第3步:GitHub上创建一个仓库

  第4步:将本地的仓库添加到GitHub里刚创建好的仓库 git remote add origin git@github.com:gityonghuming/learngit.git

  第5步:把本地库的所有内容推送到远程库上:git push -u origin master

  第6步:之后提交到GitHub,只要本地作了提交,就可以通过命令:$ git push origin master

从github上克隆一个仓库到本地,

  第1步:首先必须知道仓库的地址 git clone git@github.com:wufangfang0614/gitskills.git

  第2步:查看远程库信息,使用git remote -v;本地新建的分支如果不推送到远程,对其他人就是不可见的;

  第3步:在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

  第4步:建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;

  第5步:从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

  第6步:从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

本地分支操作(name为分支名)

  查看分支:git branch

  创建分支:git branch <name>

  切换分支:git checkout <name>

  创建+切换分支:git checkout -b <name>

  合并某分支到当前分支(不保留分支记录):git merge <name>

合并某分支生成新的一个版本(留分支记录):git merge --no-ff -m "merge with no-ff" <name>

  删除分支:git branch -d <name>

  强行删除分支:git branch -D <name>(丢弃一个没有被合并过的分支)

合并分支发现有冲突,将文件修改再次提交,删除没用的分支。

分支策略

  在实际开发中,我们应该按照几个基本原则进行分支管理:

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

  那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

  你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除

  当手头工作没有完成时,先把工作现场保存git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

  git stash list可以查看保存的工作现场

标签

  命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;

    git tag -a <tagname> -m "blablabla..."可以指定标签信息;

    git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;

  命令git tag可以查看所有标签。

  命令git push origin <tagname>可以推送一个本地标签;

  命令git push origin --tags可以推送全部未推送过的本地标签;

  命令git tag -d <tagname>可以删除一个本地标签;

  命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

git学习笔记总结的更多相关文章

  1. Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

  2. Git学习笔记(10)——搭建Git服务器

    本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...

  3. Git学习笔记(四)

    一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们 ...

  4. git 学习笔记6--remote & log

    git 学习笔记6--remote & log 创建SSH Keys ssh-keygen -t rsa -C "1050244110@qq.com" 本地关联远程 git ...

  5. Git学习笔记---协作的一般流程

    一般的操作流程 1.pull 王小坤与另一个同事张大炮一起开发一个项目,张大炮昨天修改了数据库读写的api,优化了执行速度,并把read()函数改名成了Read(),下午下班之前把这些代码push到服 ...

  6. 【转帖】Git学习笔记 记录一下

    本文内容参考了廖雪峰老师的博文,并做了适当整理,方便大家查阅. 原帖地址 https://wangfanggang.com/Git/git/ 常用命令 仓库初始化 - git init 1 git i ...

  7. [转]Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

  8. GIT学习笔记(1):创建版本库

    GIT学习笔记(1):创建版本库 创建版本库 1.创建合适目录并初始化为仓库 版本库即需要交由Git进行版本控制的目录,其下所有文件的修改.删除,Git都能跟踪还原. 说明:初始化后,当前目录下会多出 ...

  9. GIT学习笔记(5):变基

    GIT学习笔记(5):变基rebase 变基 引入变基 在Git中整合来自不同分支的修改主要有两种方法:merge以及rebase. 整合分支最容易的方法是merge,他会把两个分支的最新快照以及两者 ...

  10. GIT学习笔记(4):远程分支

    GIT学习笔记(4):远程分支 远程分支 远程分支是什么 远程分支是对远程仓库中的分支的索引.它们是一些无法移动的本地分支:只有在GIT进行网络交互时才会更新.远程分支就是书签,提醒着你上次连接远程仓 ...

随机推荐

  1. php session详解

    <?php /* * session_abort — Discard session array changes and finish session 舍弃会话序列变化和结束会话 session ...

  2. A trip through the Graphics Pipeline 2011_10_Geometry Shaders

    Welcome back.     Last time, we dove into bottom end of the pixel pipeline. This time, we’ll switch ...

  3. 初探XML

    1.XML是什么? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签 ...

  4. PHP->利用GD库新建图像

    1.确认php中GD库是否开启 在PHP配置文件php.ini中查找extension=php_gd2.dll,去掉前边的(分号) ';' 即可,一般php是默认开启的 2.绘画步骤 创建一个画布(画 ...

  5. yii 基础版用rbac-plus

    1.将高级版的common/models/user.php覆盖掉基础版的models/user.php 2.将命名空间 namespace common\models;改为 namespace app ...

  6. 【C++】const

    1. 默认状态下,const对象仅在文件内有效,即在不同文件中出现同名const变量的时候,其实相当于这些同名const是不同的东西. 如果想要在文件中共享const变量,可以在const变量不管是声 ...

  7. 盒模型中--border

    三要素:宽border-width,形状border-style,颜色border-color <style> div{ width:300px; height:300px; backgr ...

  8. ionic获取焦点

    功能需求:点击按钮后获取input输入框的焦点 获取焦点用jq focus()不成功,因为angular也不推荐,所以网上找了一个在focus封装成指令的方法 指令写法: .directive('my ...

  9. Jmeter关联

     一.Jmeter关联的方式: Jmeter中关联可以在需要获取数据的请求上 右键-->后置处理器 选择需要的关联方式,如下图有很多种方法可以提取动态变化数据: 二.正则表达式提取器: 1.比如 ...

  10. OC-数组排序-NSSortDescriptor使用

    OC-数组排序-NSSortDescriptor使用 在Object-c中,当有一个班级类MyClass,还有一个学生类Student.在班级类MyClass中通过一个可变数组NSMutableArr ...