一:前言

hi~ 又和大家见面了~

本文总结了在工作中常用的基础命令和进阶命令,介绍了一种git提交格式的建议,整体简单介绍了一下git。

Git的定义是:分布式版本控制系统,用于项目开发中的版本控制。

从本质上来讲 Git 是一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制系统的用户界面。

Git 的核心部分是一个简单的键值对数据库(key-value data store)。 你可以向该数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索(retrieve)该内容。

git管理的项目工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。

已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。

工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。

初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。

Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。

在进行提交操作时,Git 会保存一个提交对象(commit object)。该提交对象包含一个指向暂存内容快照的指针、作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。

二:git存储

git将项目的存储分为4部分,每部分有自己作用,

Workspace:工作区(当前用户操作修改的区域)

Index / Stage:暂存区 (add后的区域)

Repository:仓库区或本地仓库(commit后的区域)

Remote:远程仓库(push后的区域)

在git status中的体现,见下图:

Changes to be committed::代表被add的文件,被加载到了暂存区

Changes not staged for commit:代表在当前分支中被修改的文件,还没有被add,存储在工作区

Untracked files :代表不被git追踪的文件,可以理解为不被git管理的文件

如果没有Changes to be committed和Changes not staged for commit说明现阶段所有的修改已经被commit到本地仓库

如果git status后出现下述情况,说明还有已经的commit到本地仓库的还未被push到远程仓库

$ git status

On branch network-master

Your branch is ahead of 'origin/network-master' by 2 commits.

(use "git push" to publish your local commits)

Git 作为一个系统,是以它的一般操作来管理并操纵(HEAD、index、Working Directory)三棵树的

HEAD: 是当前分支引用的指针,它总是指向该分支上的最后一次提交。 这表示 HEAD 将是下一次提交的父结点。 通常,理解 HEAD 的最简方式,就是将它看做 你的上一次提交的快照。

index: index索引是你的 预期的下一次提交。 我们也会将这个概念引用为 Git 的 “暂存区域”,这就是当你运行 git commit 时 Git 看起来的样子。Git 将上一次检出到工作目录中的所有文件填充到索引区,它们看起来就像最初被检出时的样子。 之后你会将其中一些文件替换为新版本,接着通过 git commit 将它们转换为树来用作新的提交。

Working Directory:最后,你就有了自己的工作目录。 另外两棵树以一种高效但并不直观的方式,将它们的内容存储在 .git 文件夹中。 工作目录会将它们解包为实际的文件以便编辑。

三:git提交规则

首先,有个问题需要确认一下,提交信息是使用中文还是英文呢?

如果你的项目是开源项目并且面向国际的开源项目,类似于阿里的DruidPingCAP的TiDB等,那么一定要是用英文提交信息的!

如果你的项目是公司内部使用或者只会被公司内部开发修改,那么中文也是不错的,更加便于查看和管理。当然,开发组中的英文能力都不错的话,用英文也是可以的。

分支Branch管理:

master 分支为主分支(保护分支),禁止直接在master上进行修改代码和提交;

develop 分支为测试分支,所有开发完成需要提交测试的功能合并到该分支;

feature 分支为开发分支,大家根据不同需求创建独立的功能分支,开发完成后合并到develop分支;

fix 分支为bug修复分支,需要根据实际情况对已发布的版本进行漏洞修复;

标签Tag管理:

Tag采用三段式:v版本.里程碑.序号(v2.3.1)

架构升级或架构重大调整,修改第1位

新功能上线或者模块大的调整,修改第2位

bug修复上线,修改第3位

当然,可以根据实际情况来设计,比如项目特别大,可以使用四段表达Tag,项目比较小也可以使用二段式Tag,只要符合场景并有实际意义即可

Tag相关:Tag管理

提交信息格式:

下面只是提供一种建议格式,大家可以根据自己的项目实际情况来定格式,只要能把当前提交表达清楚,格式统一,方便快速阅读和定位即可!

建议示例:

(urllAnalyz) 添加解析url功能l

(TestServiceImpl) 修改某功能的某个实现为另一个实现

(TestUnti) 修复url特殊情况下解析失败问题 (issue#12)

(getData) 重构获取数据的方法

(getDataTest) 添加(修改、删除)获取数据的单元测试代码

格式

(影响模块)提交描述信息(#issue?)

优点作用

与github数据issue关联,便于通过issue获取更多信息

commit 提交时,格式统一,便于后续快速准确定位提交

可以更好的将此次提交表述清楚

四:基础命令

初始化项目为git项目

1.cd到项目文件路径下

2.git init

clone服务器代码到本地

git clone

添加修改文件到暂存区

git add

git add -A 添加所有修改文件到暂存区

提交修改到本地仓库

git commit -m ‘提交信息’

git commit -a -m ‘提交信息’ 相当于git add -A + git commit -m 的整合

提交本地仓库的修改到远程仓库

git push

查看文件本次的修改

git diff 显示本次所有被修改文件的修改

git diff 显示该文件本次的修改

查看当前分支下当前状态

git status 显示出被修改的文件和提交的次数等

查看提交历史

git log

merge其他分支到当前分支

git merge

切换到上一个分支

git checkout -

切换到其他分支

git checkout

在某一分支基础上创建新分支

git checkout 切换到基础分支

git checkout -b 在当前分支基础上 创建新分支

显示分支

git branch 所有本地分支

git branch -r 所有远程分支

git branch -a 所有分支,本地和远程

删除本地分支

git branch -D

删除远程分支

git push origin --delete

删除本地tag

git tag -d

删除远程tag

git push origin :refs/tags/

查看tag信息

git show

保存账号密码,避免每次push都要输入

1.确保在git中手动输入过账号和密码

2.输入下面语句

git config --global credential.helper store

取消add后的的文件

git reset HEAD

git reset HEAD 回退所有add

add会被标识为Changes to be committed,取消add后标识为Changes not staged for commit(不等于untrack)

取消track某一文件

git rm -r --cache

untrack后,使用commit -a 时,不会将其添加到暂存区中

只merge某一个分支上的某一个commit

git cherry-pick

删除某些commit,将head重定位到某一commit

git reset --hard

git push origin HEAD --force 此步骤将服务器方也设置为相commit

删除本地在远程服务器上不存在的分支

git remote prune origin

新建一个tag到指定commit

git tag

git tag 当前commit

取消当前合并,重建合并前状态

git merge --abort

五:进程

初始化项目,并上传到git服务器

基本过程: 创建远程仓库、初始化本地git仓库、将本地仓库与远程仓库关联起来、添加本地仓库想要提交的代码到本地git缓冲区,将本地仓库的本地分支与远程仓库的远程分支关联起来、提交代码

在git服务器上创建同名git项目,并获取http地址

本地git初始化项目git仓库,在项目目录下

git init

将本地git仓库和远程仓库关联起来,并设置远程仓库名称

git remote add

其中http地址为上述第一步获取的远程仓库的地址,name一般为origin,当然也可以设置其他的名字

例如:git remote add origin http://igit.corp.com/my/test.git

添加项目文件到本地git缓冲区

git add -A

git commit -m ‘初始化项目’

或者

git commit -a -m ‘初始化项目’

将本地分支关联远程分支并提交,git默认在远程分支上创建于本地分支同名的分支

git push --set-upstream origin master

这就是将本地的master分支 与 origin远程仓库关联起来并在远程仓库创建同名master分支,以后本地master都提交到远程仓库中的origin/master分支上。

upstream:上游的意思

至此,应该就可以了,我们可以在git服务器上刷新看看是否提交上去了

提交某一分支的修改

查看当前分支的修改

git status

查看想要查看的文件的修改

git diff

确认正确后,提交修改到暂存区

git add -A 或者 git add

提交到本地仓库

git commit -m ‘提交信息’

提交到远程仓库

git push

取消track某一文件

git rm -r --cache

untrack后,使用commit -a 时,不会将其添加到暂存区中

之后会在.ignore文件中将该untrack的文件添加进去,完成

git add 所有修改文件_工作中Git的使用实践相关推荐

  1. git add 所有修改文件_Git 技术干货!工作中quot;Gitquot;的使用实践和常用命令合集!

    作者:洋仔聊编程 出自:InfoQ 写作平台 原文:xie.infoq.cn/article/1ce91dc60431b1b8845729d41 工作中git是一项必不可少的技能,在项目的开发进程中起 ...

  2. git add 所有修改文件_Git管理修改、撤销和删除文件

    备注: 知识点 管理修改 撤销修改 没有`git add`添加到暂存区时的撤销 `git add`添加到暂存区后的撤销 git commit提交后的撤销 删除文件 确定从版本库中删除文件 从暂存区把误 ...

  3. add svn 多个文件_用好Git 和 SVN ,轻松驾驭版本管理

    一.Git vs SVN Git 和 SVN 孰优孰好,每个人有不同的体验. Git是分布式的,SVN是集中式的 这是 Git 和 SVN 最大的区别.若能掌握这个概念,两者区别基本搞懂大半.因为 G ...

  4. 收藏!工作中Git使用实践和常用命令流程合集

    来自:匠心Java 工作中git是一项必不可少的技能,在项目的开发进程中起着至关重要的作用 下面介绍一些git在工作中的一些使用实践.常用流程.常用命令,供大家参考! 一:前言 Git的定义是:分布式 ...

  5. 【代码管理】GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流

    GitHub操作总结 : 总结看不明白就看下面的详细讲解. . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details ...

  6. 工作中git常用命令总结

    工作git问题总结 前言 一.git revert 二.推送代码 三.合并与冲突的解决 四.commit备注相关 五.拉取指定远程分支代码 六.git stash 暂存更改 七.git cherry- ...

  7. git 上传修改文件

    git 上传修改文件 git init git remote add superman https://gitee.com/li_jiazhao_1/ChangClass_examination.gi ...

  8. git使用学习四、git add忽略指定文件夹与文件

    git使用学习四.git add忽略指定文件夹与文件 前言 .gitignore 解决提前git commit导致.gitignore失效的问题 解决错误添加数据集导致.git文件夹太大的问题 前言 ...

  9. git add 之后的文件被删除怎么恢复

    git add 之后的文件被删除怎么恢复 git add 之后的文件被删除怎么恢复 git bash 恢复 idea 图形化界面操作 git add 之后的文件被删除怎么恢复 今天不小心把 git a ...

  10. 【Git】Git获取Commit修改文件列表

    Git获取Commit修改文件列表 获得Git本次Commit修改的文件 #!/bin/bash# 命令格式 # 会列出compare2与compare1的不同. # git diff --name- ...

最新文章

  1. 年薪不到 25.2 万免费学,廖雪峰的“大数据高级开发”课程第5期开始招生
  2. python怎么输出结果_如何在python中打印SQLite查询的结果?
  3. Linux下Minigui开发环境的搭建(PC+S3C2440
  4. 023_jdbc-mysql的CRUD操作
  5. 基于 HTTP 协议的 3 种实时数据获取技术
  6. DATAGUARD 参数配置
  7. 华为交换机linux版本号,Cisco和华为交换机常用配置命令总结
  8. 28岁成中科院课题组长,短短半年他接连在Science和Nature发论文
  9. 如何给自己的个人博客添加一个呆萌的live-2d博客精灵/看板娘
  10. Mysql 解决left join 数据重复的问题
  11. ros中web端通过 按钮加载本地静态 pgm 地图显示在canvas画布中
  12. Mac电脑优化工具箱MacCleaner PRO
  13. Mini 容器学习笔记10——方法注入
  14. linux怎么实时查看目录下是否有文件生成
  15. Neverland Test 2.0
  16. excel如何批量查询ip归属地?
  17. 实验5 类的继承、派生和多态
  18. 如何部署在线团队协作系统kooteam(在线团队协作工具)
  19. 微信小程序设置文字样式white-space失效
  20. redisson 主从模式Unsupported protocol version 50_华米Amazfit Pop智能手表发布:支持50米防水,血氧检测 - 数码 - IT商业网...

热门文章

  1. leetcode-120-Triangle-等腰三角形
  2. css常见样式命名思想
  3. 全球网速最快的地方在哪里?中国固定宽带网速增长超美国!
  4. 使用cp命令拷贝目录下指定文件外的其他文件
  5. java8之StringJoiner。终于有像guava类库里的功能了
  6. jQuery 2.0.3 源码分析Sizzle引擎 - 编译函数(大篇幅)
  7. (转)iOS Wow体验 - 第六章 - 交互模型与创新的产品概念(1)
  8. 斐波那契数列——O(1)算法
  9. nginx php重定向,nginx如何重定向信息
  10. imu预积分_VINS 中的 IMU 预积分推导和代码解读