1、创建版本库

在D盘中打开Git Bash Here

1.1、创建一个空目录

Mkdir gitDemo –创建一个目录

Cd gitDemo  --进入gitDemo目录

Pwd –查看当前目录的路径

1.2、通过git init命令把目录变成git可以管理的仓库

Git init

你会发现,多出一个.git文件,也可以理解成存放代码的仓库(暂存区)

1.3、把文件添加到仓库中(暂存区)

创建一个文件readme.txt,内容随便写

Git add readme.txt –将文件放入暂存区

没有提示代表成功

1.4、把文件提交到仓库中

Git commit –m ‘提交readme.txt文件’

可以通过git status 查看状态

如果有文件未提交,比如在readme.txt 中新增内容

可以通过git diff 命令查看修改的内容

如果要提交到git仓库中,你需要先add 然后再 commit

小结:

初始化一个Git仓库,使用git init命令。

添加文件到Git仓库,分两步:

使用命令git add <file>,注意,可反复多次使用,添加多个文件;

使用命令git commit -m <message>,完成。

2、理解工作区和暂存区

工作区:就是你在电脑上看到的目录,比如目录下testgit里的文件(.git隐藏目录版本库除外)。或者以后需要再新建的目录文件等等都属于工作区范畴。

  版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。

  我们前面说过使用Git提交文件到版本库有两步:

  第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。

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

3、版本回退

3.1、查看历史记录

Git log

如果要简化上面的信息

Git log --pretty=oneline

也可以更简单

注意,上面三个图黄色部分为commitId(也就是下面所说的版本号),它是全球唯一的,reflog中的commitid是简写。

3.2、还原到指定的版本号

Git reset --hard 版本号

注意事项:还原到指定版本后,在通过git log查看,就找不到指定版本之后的信息了,如上图所示,如果想还原到指定版本之后的信息,只能通过git reflog查找,如下图所示:

4、git撤销和删除文件

4.1、撤销操作

如果我发现readme.txt新增的内容有误,但是我已经add了,还没有提交,那么我可以通过以下方法进行修改:

(1):手动改写readme.txt错误的信息,然后add—》commit。

(2):通过git reset --hard 版本号命令恢复到上一个版本。

现在有一个新方法,使用git checkout -- file 方法丢弃工作区的修改

命令 git checkout -- readme.txt 意思就是,把readme.txt文件在工作区做的修改全部撤销,将工作区的内容改为暂存区的内容。

4.2、删除文件

比如我新增了一个文件a.txt

然后我在目录里面删除a.txt(rm a.txt),我现在有三种选择:

(1):直接addàcommit提交

(2):恢复到以前版本(git reset –hard 韩本号)。

(3):撤销修改内容 git checkout – a.txt(前提是没有add)

5、创建与合并分支

在版本回填退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

5.1、创建一个分支并切换到该分支(git checkout –b dev)

Git branch 查看当前分支

git checkout 命令加上 –b参数表示创建并切换,相当于如下2条命令

  git branch dev :创建分支

git checkout dev:切换分支

5.2、

在文件a.txt中添加内容1111111并提交

查看master(主分支a.txt内容)

我们可以看到主分支的a.txt文件没有内容,这时候我们需要将dev分支合并到master分支上。

git merge命令用于合并指定分支到当前分支上,合并后,再查看readme.txt内容,可以看到,和dev分支最新提交的是完全一样的。

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

合并完成后,我们可以接着删除dev分支了,操作如下:

总结创建与合并分支命令如下:

  查看分支:git branch

  创建分支:git branch name

  切换分支:git checkout name

  创建+切换分支:git checkout –b name

  合并某分支到当前分支:git merge name

删除分支:git branch –d name

6、分支管理策略

通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息(通过日志找不到了)现在我们来使用带参数 –no-ff来禁用”Fast forward”模式。首先我们来做demo演示下:

创建一个dev分支。

修改readme.txt内容。

添加到暂存区。

切换回主分支(master)。

合并dev分支,使用命令 git merge –no-ff  -m “注释” dev

查看历史记录

分支策略:首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

7、多人协同开发

多人协作时,大家都会往master分支上推送各自的修改。现在我们可以模拟另外一个同事,可以在另一台电脑上(注意要把SSH key添加到github上)或者同一台电脑上另外一个目录克隆,新建一个目录名字叫gitDemo1

7.1、先将分支新增一个新内容(可増可不增,方便了解分支)推送到远程库中

7.2、进入gitDemo1目录中,克隆远程库到本地

7.3、创建分支并与远程库关联:git checkout  –b dev origin/dev

注意:clone过来的readme.txt文件没有dev内容的

虽然你cat readme.txt可以看到,因为clone过来的是master主线,你可以使用git pull将远程库内容拉过来

7.4、在gitDemo1/gitDemo/readme.txt文件底下新增内容aaaaaaa

7.5、将新增的内容推送到远程库dev分支上

刷新远程库地址

7.6、在d:\gitDemo目录底下拉取刚才d:\gitDemo1\gitDemo提交的修改

Git pull失败,原因是没有指定本地dev分支与远程origin/dev分支的链接(虽然前面我们使用git push origin dev推送了分支,但也需要建立连接),根据提示,设置dev和origin/dev的链接

7.7、当dev代码没有错误的时候,将dev代码合并到master中

因此:多人协作工作模式一般是这样的:

首先,可以试图用git push origin branch-name推送自己的修改.

如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull试图合并。

如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch-name推送。

最后发布程序的时候,负责人在服务器上将远程库中的dev拉过来(git pull),然后合并到master主线上(git merge dev)。

Git基本常用命令如下:

  mkdir:         XX (创建一个空目录 XX指目录名)

  pwd:          显示当前目录的路径。

  git init          把当前的目录变成可以管理的git仓库,生成隐藏.git文件。

  git add XX       把xx文件添加到暂存区去。

  git commit –m “XX”  提交文件 –m 后面的是注释。

  git status        查看仓库状态

  git diff  XX      查看XX文件修改了那些内容

  git log          查看历史记录

  git reset  --hard HEAD^ 或者 git reset  --hard HEAD~ 回退到上一个版本

  (如果想回退到100个版本,使用git reset –hard HEAD~100 ,也可以不写HEAD~,直接写版本号,版本号通过日志查找)

  cat XX         查看XX文件内容

  git reflog       查看历史记录的版本号id

  git checkout -- XX  把XX文件在工作区的修改全部撤销。

  git rm XX          删除XX文件

  git remote add origin https://github.com/tugenhua0707/testgit 关联一个远程库

  git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库(如何推送分支,将master改成分支名字,比如:dev)

  git clone https://github.com/tugenhua0707/testgit  从远程库中克隆

  git checkout –b dev  创建dev分支 并切换到dev分支上

  git branch  查看当前所有的分支

  git checkout master 切换回master分支

  git merge dev    在当前的分支上合并dev分支

  git branch –d dev 删除dev分支

  git branch name  创建分支

  git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作

  git stash list 查看所有被隐藏的文件列表

  git stash apply 恢复被隐藏的文件,但是内容不删除

  git stash drop 删除文件

  git stash pop 恢复文件的同时 也删除文件

  git remote 查看远程库的信息

  git remote –v 查看远程库的详细信息

git push origin master  Git会把master分支推送到远程库对应的远程分支上

git pull  将远程库内容拉过来

Git的一些基本操作和命令的更多相关文章

  1. Git与TortoiseGit基本操作

    Git与TortoiseGit基本操作 1. GitHub操作 本节先简单介绍 git 的使用与操作, 然后再介绍 TortoiseGit 的使用与操作. 先看看SVN的操作吧, 最常见的是 检出(C ...

  2. Git 基本概念及常用命令

    一.基本概念 文件的三种状态:(任何一个文件在git中都有以下三种状态) 1) 已提交(committed):表示该文件已经被安全地保存在本地数据库中了. 2) 已修改(modified):表示修改了 ...

  3. 【android Studio】零git知识、零脚本命令,即刻体验git版本管理魅力!

    git的优点就不去多说了.阻碍咱新手体验它的唯一问题就是门槛太高,脚本看着像天书, 本文主要阐述的,就是如何在android studio上,也能像tfs那样,非常简单的操作,就能使用git进行版本管 ...

  4. git 分支的基本操作

    git分支的基本操作. 创建私有分支:     $git branch branchName commitID     $git checkout -b branchName commitID 注意: ...

  5. Git 基本原理与经常使用命令

    平时使用过两种版本号控制软件 SVN 和 Git,平心而论,假设纯粹自己使用,那么绝对 Git 更加适合,本地库.远程库.离线工作.强大而灵活的分支.大名鼎鼎的Github, 这些都是选择 Git 的 ...

  6. git 安装 和 基本操作

    林纳斯的小故事 感兴趣的同学可以自己百度一下 版本控制常用svn git @@@svn 1 搭建环境 server:visualSVN Serverserver port: https 默认443ht ...

  7. Git 配置环境及常用命令整理

    一.Git教程网站 廖雪峰网站 易百GitHub命令:https://www.yiibai.com/git/git_clone.html 完成Windows环境命令下Git config配置 设置好之 ...

  8. Git 学习笔记–基本操作

    Git 与 SVN 不同,是分布式的版本控制系统,不需要主服务器即可工作,实际中为了方便各个工作者间同步工作,通常还是会设置主服务器. Git的设置及初始化: 设置全局用户信息: luojiahu@u ...

  9. Git学习笔记(一)Git初识及基本操作

    详细完整教程:官方文档,廖神Git教程,武sir 一.什么是Git? 定义:Git是分布式版本控制系统. 1.1什么是版本控制 我们可以回想以下,在我们上学毕业要写论文或是准备一份演讲稿的时候,都会用 ...

随机推荐

  1. bzoj4025: 二分图 lct

    题意:带增删边的查询二分图 题解:因为二分图肯定带奇环,lct维护,每次要加入一条边之前判断会不会构成环,如果会就把最先会删除的边删掉,然后如果是奇环就打个标记,然后把奇环数++,删除的时候,把标记删 ...

  2. Leetcode 94

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...

  3. sql server数据库中char、nchar、varchar、nvarchar的选择

    在数据库中,字符型的数据是最多的,可以占到整个数据库的80%以上.为此正确处理字符型的数据,对于提高数据库的性能有很大的作用. 在字符型数据中,用的最多的就是Char与Varchar两种类型.前面的是 ...

  4. 使用Bulk Binding批量绑定的模式高效处理ORACLE大量数据

           用批量绑定(bulk binding)的方式.当循环执行一个绑定变量的sql语句时候,在PL/SQL 和SQL引擎(engines)中,会发生大量的上下文切换(context switc ...

  5. 【HTML+CSS】右侧固定,左侧自适应布局

    <style> *{ padding: 0; margin: 0; } #left{ float: right; width: 100%; height: 300px; } #box{ m ...

  6. forget word out2

      1★ dictionary / dik ʃ ən əri   dict   2★ fy => faction f æk ʃ ən 派别  

  7. sql Server如何执行批量插入和批量删除

    平时我们sql server执行查询语句都是通过 insert into 表名(字段名,字段名) values(插入值,插入值) --单条插入语句--- insert into Reader(read ...

  8. 通过ReRes让chrome拥有路径映射的autoResponse功能。

    前端开发过程中,经常会有需要对远程环境调试的需求.比如,修改线上bug,开发环境不在本地等等.我们需要把远程css文件或者js映射到本地的文件上,通过修改本地文件进行调试和开发.通常我们可以通过以下方 ...

  9. Activity与Service数据交互:Binder、bindService的用法

    package com.lixu.jiaohu; import com.lixu.jiaohu.MyAppService.Mybind; import android.app.Activity; im ...

  10. 用sql + Ado设置access的字段的默认值

    procedure TFormLOrder.ModifyDB; var F: Integer; begin with TADOQuery.Create(nil) do try // Connectio ...