1. git init

我们从初始化一个仓库开始,通过此命令可以初始化一个仓库

git init



首先我们在当前目录下创建一个目录pratice和一个文件test.js

mkdir pratice
cd pratice
touch test.js
ls

然后我们修改一下test.js文件,给它加上一句代码console.log(1)

vim test.js

2. git status

查看当前分支仓库状态

git status

3. git add

将工作区中的代码提交到缓存区中

  • git add . 全部暂存
  • git add [filename]
git status
git add .



这时我们已经在暂存区中新增了一个文件了

4. git commit

将提交到缓存区中的代码保存到本地仓库中

  • git commit -m '提交备注' 平时用得比较多的就是-m了,后面可以加上本次提交需要备注的信息
  • git commit 有时候手一抖,直接就回车了,那么会进入vim编辑器,备注下本次提交的信息即可(具体vim操作可以某度一下学习)
  • git commit -a -m '提交备注' 带上一个-a可以将工作区中还没有add的代码也commit了,相当于是将add和commit两次操作合并了
  • git commit --amend 更改最近一次提交的信息,这个操作就优秀了,目前我发现的大致是以下两个用处
    • 比如我上一次提交的是修改了某个bug,这一次我又是修改了那个bug,然后我要将这一次的修改和上一次的提交用同一个commit备注,那么你可以使用这个命令,将会使用上一次的commit备注信息,同时生成一个新的commitId,
    • 你想把本次的修改提交到上一次的提交中,并且把上一次备注的提交信息改成这次的
git log

vim test.js
// 新增console.log(2);
git add .
git commit --amend





你会发现当前commit的id变了,并且上一次的commit被合并到这一次commit当中,使用了这一次新生成的id

5. git merge

此操作用于合并commit,具体而言就是将需要合并的分支上的最后一次commit merge到当前分支的最后一次commit上

我们通过git checkout -b test创建和切换一个新的分支test



目前两个分支的都指向一个commit id

接下来我们在test上修改test.js,添加console.log(3);然后执行add和commit操作,并切换回master分支使用git merge test

vim test.js
git add .
git commit -m 'modify test.js in branch of test'

现在所有分支状态是这样的

git checkout master
git merge test



合并后分支状态是这样的

merge用处

  • 首先就是merge其他分支代码
  • 其次当pull拉下远程仓库最新代码时,这时git会自动将远程仓库最新代码merge到本地仓库当前分支上

冲突情况

  1. 当开发人员A改了文件test1.js,并commit后,开发人员B改了文件test2.js,并commit。这时开发人员B merge开发人员A的代码,这时合并后提交一个新的commit,并且这两个修改的文件都有效。
  2. 当开发人员A和开发人员都改了文件test1.js某一行代码,并且都commit了。开发人员A如果去merge开发人员B的代码,这时会产生一个conflict,使开发人员A进入冲突解决状态,打开test1.js会看到冲突的代码处,git已经无能力去处理到底谁的代码是你要的,但是它会提示冲突处,留待开发人员去处理,

解决方案

1 开发人员手动解决冲突后,在git add .和git commit提交冲突,这时会自动加上上一次commit的备注信息,因为刚刚进入的是一个conflict冲突修改状态。

2 如果开发人员放弃解决冲突,可以通过git merge --abort,将会回到merge分支前的状态

实际试试

首先程序A修改了test.js文件把第三行代码改成了输出4,并commit了

程序B修改了test.js文件把第三行代码改成了输出5,并commit了



这时候的分支图



这时候程序员B要合并程序员A的代码,

git merge test



我们通过vim打开test.js文件看看



OK,然后我们认为程序A修改无效,采用我的方案

git add .
git commit

这时候我们看看分支图

6. git log

  • git log 查看历史commit记录

  • git log --patch 或者 git log -p 查看每个commit的改动细节

  • git log --stat 查看简要改动信息,不深入细节

三个图结果还是很明显的,就不细说了

7. git show

  • git show 查看当前head指向的commit上的详细修改信息

  • git show [某一次commit的id] 查看某一次commit的详细信息

  • git show [某一次commit的id] [某个目录下的某个文件]

8. git diff

  • git diff 查看未提交的内容和暂存区的内容差异

    我们继续修改test.js先添加上console.log(6),并且git add . 添加到缓存区,然后我们又在工作区将6改成7,通过git diff查看下效果

  • git diff --staged 显示暂存区和上一次提交之间的不同。

  • git diff HEAD 对比工作目录和上一次提交的差异

三个图还是挺直观的,不同的场景使用这三者中的一个

9. git fetch

  • git fetch <远程主机名> <远程分支名>:<本地分支名> 创建本地分支名并将远程仓库仓库某个远程分支拉到本地这个分支上

    然后我们可以在本地选择哪个分支去合并这个代码

10.git pull

  • git pull <远程主机名> <远程分支名>:<本地分支名> 将远程仓库分支上的代码拉下来并merge到当前本地分支上

    如果本地分支和远程分支名相同,可以直接写一个,例如我们常规操作git pull origin master。
git pull origin master

==============

git fetch origin master
git merge orgin/master

以上两个操作是等价的

git初级浅入其常用操作的更多相关文章

  1. git高级浅入之rebase与merge差异

    目录 rebase的几个操作 rebase与merge的比较和实际操作 结合动图加深理解rebase   1.rebase的几个操作 git rebase [分支名] git rebase --con ...

  2. Git终端命令行的常用操作

    一.git源代码管理的优点 方便多人协同开发.工作 降低代码的管理成本 良好的分支管理机制 二.结构分析 服务端和客户端都有版本控制能力,都能进行代码的提交.合并 结构一: 结构二: 三.工作区的创建 ...

  3. Git介绍及常用操作演示(一)--技术流ken

    Git介绍 Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发 ...

  4. git报错:'fatal:remote origin already exists'怎么处理?附上git常用操作以及说明。

    git添加远程库的时候有可能出现如下的错误, 怎么解决? 只要两步: 1.先删除 $ git remote rm origin 2.再次执行添加就可以了. ---------------------- ...

  5. 版本控制工具——Git常用操作(上)

    本文由云+社区发表 作者:工程师小熊 摘要:用了很久的Git和svn,由于总是眼高手低,没能静下心来写这些程序员日常开发最常用的知识点.现在准备开一个专题,专门来总结一下版本控制工具,让我们从git开 ...

  6. 【Git使用详解】Egit的常用操作详解

    常用操作 操作 说明 Fetch 从远程获取最新版本到本地,不会自动merge Merge 可以把一个分支标签或某个commit的修改合并现在的分支上 Pull 从远程获取最新版本并merge到本地相 ...

  7. Kotlin——初级篇(八):关于字符串(String)常用操作汇总

    在前面讲解Kotlin数据类型的时候,提到了字符串类型,当然关于其定义在前面的章节中已经讲解过了.对Kotlin中的数据类型不清楚的同学.请参考Kotlin--初级篇(三):数据类型详解这篇文章. 在 ...

  8. git常用操作 配置用户信息、拉取项目、提交代码、分支操作、版本回退...

    git常用操作 配置用户信息.拉取项目.提交代码.分支操作.版本回退... /********git 配置用户信息************/ git config --global user.name ...

  9. Git的安装及常用操作

    一.Git的安装 1.下载Git,官网地址为:https://git-scm.com/downloads.     2.下载完成之后,双击目录进行安装 3.选择安装目录 4.选择组件,默认即可 5.设 ...

随机推荐

  1. redirect和forward的区别

    异同 1.从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以 ...

  2. ElasticStack系列之十九 & bulk时 index 和 create 的区别

    区别: 两篇文章 id 都一样的情况下,index 是将第二篇文章覆盖第一篇:create 是在第二篇插入的时候抛出一个已经存在的异常 解释: 在批量请求的时候最好使用 create 方式进行导入.假 ...

  3. SQL记录-PLSQL事务

    PL/SQL事务   数据库事务是一个工作的原子单元,其可以由一个或多个相关的SQL语句组成.所谓的原子性就是数据库的修改所带来的构成事务的SQL语句可以集体被提交,即永久到数据库或从数据库中(撤消) ...

  4. A*算法–A* algorithm tutorial

    Author:Justin Heyes-Jones From: http://heyes-jones.com/astar.php Date:2014.8.16 本文地址:http://www.cnbl ...

  5. Intellij-idea 如何编译maven工程

    小编最近效应项目的要求,学习在idea上编写项目.作为一个新手遇到问题也算是正常的,重要的是把它解决,get新技能. 编写过maven工程的小伙伴们应该都知道怎么在eclipse中编译maven工程: ...

  6. WebSlides - 轻松制作漂亮的 HTML 幻灯片(演讲稿)

    WebSlides 是一个开源的 HTML 幻灯片项目,能够帮助熟悉前端语言的开发者快速制作出效果精美的幻灯片.页面中的每个 <section> 都是一个独立的幻灯片,只需要很少的 CSS ...

  7. HDU 2521 反素数 模拟题

    解题报告:水题,直接附上代码,只是觉得这题的作者是不是吃饱了饭撑的,反素数的概念跟这题一点关系都没有. #include<cstdio> int judge1(int k) { ; ;i& ...

  8. 蓝桥杯 问题 1117: K-进制数 (递归)

    题目链接 题目描述 考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0. 考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0. 例: ...

  9. (P2022 有趣的数)||(zoj Little Sub and Mr.Potato's Math Problem)(思维)

    题目链接:https://www.luogu.org/problemnew/show/P2022 题目大意:中文题目 具体思路: 第一步:我们可以先计算出当前的数前面按照字典序的话,前面有多少数(包括 ...

  10. linux中使用corntab和shell脚本自动备份nginx日志,按天备份

    编写shell脚本,实现nginx日志每天自动备份到指定文件夹! 需要的命令mv , corntab -e(定时任务),shell脚本 这里先说一下corntab: https://www.cnblo ...