git add 所有修改文件_工作中Git的使用实践
一:前言
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的使用实践相关推荐
- git add 所有修改文件_Git 技术干货!工作中quot;Gitquot;的使用实践和常用命令合集!
作者:洋仔聊编程 出自:InfoQ 写作平台 原文:xie.infoq.cn/article/1ce91dc60431b1b8845729d41 工作中git是一项必不可少的技能,在项目的开发进程中起 ...
- git add 所有修改文件_Git管理修改、撤销和删除文件
备注: 知识点 管理修改 撤销修改 没有`git add`添加到暂存区时的撤销 `git add`添加到暂存区后的撤销 git commit提交后的撤销 删除文件 确定从版本库中删除文件 从暂存区把误 ...
- add svn 多个文件_用好Git 和 SVN ,轻松驾驭版本管理
一.Git vs SVN Git 和 SVN 孰优孰好,每个人有不同的体验. Git是分布式的,SVN是集中式的 这是 Git 和 SVN 最大的区别.若能掌握这个概念,两者区别基本搞懂大半.因为 G ...
- 收藏!工作中Git使用实践和常用命令流程合集
来自:匠心Java 工作中git是一项必不可少的技能,在项目的开发进程中起着至关重要的作用 下面介绍一些git在工作中的一些使用实践.常用流程.常用命令,供大家参考! 一:前言 Git的定义是:分布式 ...
- 【代码管理】GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流
GitHub操作总结 : 总结看不明白就看下面的详细讲解. . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details ...
- 工作中git常用命令总结
工作git问题总结 前言 一.git revert 二.推送代码 三.合并与冲突的解决 四.commit备注相关 五.拉取指定远程分支代码 六.git stash 暂存更改 七.git cherry- ...
- git 上传修改文件
git 上传修改文件 git init git remote add superman https://gitee.com/li_jiazhao_1/ChangClass_examination.gi ...
- git使用学习四、git add忽略指定文件夹与文件
git使用学习四.git add忽略指定文件夹与文件 前言 .gitignore 解决提前git commit导致.gitignore失效的问题 解决错误添加数据集导致.git文件夹太大的问题 前言 ...
- git add 之后的文件被删除怎么恢复
git add 之后的文件被删除怎么恢复 git add 之后的文件被删除怎么恢复 git bash 恢复 idea 图形化界面操作 git add 之后的文件被删除怎么恢复 今天不小心把 git a ...
- 【Git】Git获取Commit修改文件列表
Git获取Commit修改文件列表 获得Git本次Commit修改的文件 #!/bin/bash# 命令格式 # 会列出compare2与compare1的不同. # git diff --name- ...
最新文章
- 年薪不到 25.2 万免费学,廖雪峰的“大数据高级开发”课程第5期开始招生
- python怎么输出结果_如何在python中打印SQLite查询的结果?
- Linux下Minigui开发环境的搭建(PC+S3C2440
- 023_jdbc-mysql的CRUD操作
- 基于 HTTP 协议的 3 种实时数据获取技术
- DATAGUARD 参数配置
- 华为交换机linux版本号,Cisco和华为交换机常用配置命令总结
- 28岁成中科院课题组长,短短半年他接连在Science和Nature发论文
- 如何给自己的个人博客添加一个呆萌的live-2d博客精灵/看板娘
- Mysql 解决left join 数据重复的问题
- ros中web端通过 按钮加载本地静态 pgm 地图显示在canvas画布中
- Mac电脑优化工具箱MacCleaner PRO
- Mini 容器学习笔记10——方法注入
- linux怎么实时查看目录下是否有文件生成
- Neverland Test 2.0
- excel如何批量查询ip归属地?
- 实验5 类的继承、派生和多态
- 如何部署在线团队协作系统kooteam(在线团队协作工具)
- 微信小程序设置文字样式white-space失效
- redisson 主从模式Unsupported protocol version 50_华米Amazfit Pop智能手表发布:支持50米防水,血氧检测 - 数码 - IT商业网...
热门文章
- leetcode-120-Triangle-等腰三角形
- css常见样式命名思想
- 全球网速最快的地方在哪里?中国固定宽带网速增长超美国!
- 使用cp命令拷贝目录下指定文件外的其他文件
- java8之StringJoiner。终于有像guava类库里的功能了
- jQuery 2.0.3 源码分析Sizzle引擎 - 编译函数(大篇幅)
- (转)iOS Wow体验 - 第六章 - 交互模型与创新的产品概念(1)
- 斐波那契数列——O(1)算法
- nginx php重定向,nginx如何重定向信息
- imu预积分_VINS 中的 IMU 预积分推导和代码解读