Git基本命令 -- 基本工作流程 + 文件相关操作
可以先找一个已经被git管理的项目, 我就使用这个项目吧: https://github.com/solenovex/ID3-Editor
基本工作流程
克隆以后呢, 进入该目录查看一下状态:
然后添加一个文件叫 z0.txt, 然后添加点文字:
然后再查看状态:
随后我使用git add z0.txt让这个文件被git追踪, 然后再查看状态:
这时git告诉我有变化需要被commit.
这时文件是在staging 区里面:
这时执行git commit, 输入信息之后, 就会回到命令行:
master后边那一串字符串就是这次commit的id.
这时再查看状态:
我的分支领先于origin/master一个commit.
commit之后会, 所有在staging区的文件都会被commit的:
如果这时执行git push命令, 那么就会把本地的新commit推送到远程仓库(remote repository).
不过我这里先要执行一下git pull命令:.git pull origin master.
这句话就是把有可能发生在远程仓库的变化拉取到本地的仓库, 就是为了保证我本地的代码是最新的.
命令执行后告诉我, 这个是最新的.
最后执行git push origin master:
这个命令将会把本地所有的commit推送到远程的仓库, 也就是origin这个名的仓库的master分支上.
这时有可能要求你输入用户名和密码.
这里也显示了包含了哪些commit.
这时在远程仓库就可以看到这个文件了.
文件相关操作.
追踪文件.
修改一下z0.txt的内容, 然后查看状态:
这时呢, 我想直接commit这个文件, 也就是把add和commit过程合并成一步:
git commit -am "xxxx"
git commit -a的作用就是把所有的变化添加到了staging 区, 然后直接就commit了.
这个命令只针对被追踪的文件起作用, 那么什么是被追踪的(tracked)文件呢?
就是git所知道要追踪的文件.....就是已经被commit到repository或者被add到index/staging区的文件.
想知道文件是否被追踪了, 就需要使用这个命令:
git ls-files
这个命令会列出当前repository所追踪的所有文件.
编辑文件.
编辑一个z0.txt, 并且添加一个z1.txt并写点内容, 查看状态:
可以看到这两个文件分别处于不同的状态.
z0是等待被commit, z1则是还没有被添加到staging 区.
如果现在执行git commit命令, 那么它只会对z0起作用.
而这时这个新文件的状态不变:
这时把这个文件添加到staging 区:
然后我再改一下这个文件的内容, 然后再查看一下状态:
尽管是同一个文件, git还是把每次变化分开来追踪的: 已经在staging区的和不在staging区的.
这时再用git add把该文件的变化添加到staging 区:
然后git commit:
递归添加文件.
创建多级文件夹:
然后分别在这几个目录内建立文件并写上点内容. 查看状态:
这里只能看到根目录的一个文件夹有变化, 并不能递归的看到所有的文件变化.
但我可以使用git add .这个命令来递归的添加文件变化.
然后commit:
可以看到这几个文件都被添加到git repository里面了.
退回变化.
没有变化的时候, 状态应该是这样的:
然后修改一个文件并执行git add, 查看状态:
如果不想要这个变化了, 想把这个变化退出staging区,或者叫unstage:
就可以按照图示的命令执行 git reset HEAD z0.txt.
然后该变化就是这个状态了:
但是文件的内容还是我修改过的内容.
如果我不想要这个文件有任何变化, 也就是想让这个文件退回到上次commit的内容, 那么执行:
上面那个命令图已经告诉我怎么做了 git checkout -- z0.txt:
文件的内容也恢复到原来了.
文件更名/移动.
使用git mv 源文件名 新文件名 来为文件改名.
查看状态:
git已经把该变化添加到了staging区.
然后 commit即可.
最好的实践就是在修改文件内容之前改文件名, 这样git更方便追踪该文件.
如果使用系统的命令去改文件名:
那么git认为这是两个动作: 删除了老文件, 添加个新文件.
使用git add -A 这个命令, 它会递归的添加变化, 也会更新改名,移动, 删除的文件.
这时git就会认为我是把文件改名了.
然后commit即可.
现在再改一个文件名:
如果我不想改名了, 想该回去, 那么 还是使用git mv即可, 不过参数是相反的:
就相当于未发生任何变化.
下面我要移动文件到另一个文件夹.
使用git mv移动一个文件, 然后看状态:
然后commit即可.
下面直接使用系统的mv命令把该文件移动回去.
git会把它当成两个动作.
还是同样使用git add -A:
同样git就会认为这是一个改名/更换目录的动作了.
然后commit即可.
然后我用系统的文件浏览器去改文件名.
把z2改成z1:
同样, git 认为这是两个动作:
然后git add该文件, 使用git add -u 更新index:
删除文件.
创建一个新文件, 然后使用 git rm删除该文件, 这是会报错的:
所以应该使用系统的命令/操作去删除该文件.
就相当于完全没有变化.
然后我要删除git追踪的文件z1.txt, 就应该使用git rm z1.txt 命令:
现在文件没了, 但是还不是最终的结果, 还需要commit.
再删除一个追踪的文件z00.txt.
现在不想删了, 使用git reset HEAD z00.txt 这里必须包括精确的文件名.
执行该命令后, 该文件依然没有出现.
看下状态:
这个文件目前被追踪了, 但是并不在working directory里面.
所以之前的git reset只是unstage了这个删除动作, 并没有恢复文件.
所以我需要把working directory里所有的变化都恢复, 就要使用git checkout命令.
但是如果使用系统/命令删除一个追踪的文件会怎样呢?
我用系统去删除z00这个文件.
可以看到git认为该文件在working directory里面找不到了, 这时我可以 使用git add -A, 它将添加并更新working directory里面的变化包括改名和删除.
这时这个变化就被加到了staging区, 然后commit即可.
下面从系统中删除d1文件夹.
git 认为该目录下的文件都找不到了, 然后就应该使用git add -A:
然后stage, 然后commit即可.
再总结一下git add命令常用的几个参数:
git add -A / git add --all: stage所有的变化
git add .: 把新建/修改的内容添加到staging区, 不包括删除.
git add -u: 把修改和删除的内容添加到staging区, 不包括新增的.
今天的命令包括git pull, git push, git commit -am, git ls-files, git add的各种参数, git reset HEAD, git checkout, git mv, git rm,
Git基本命令 -- 基本工作流程 + 文件相关操作的更多相关文章
- git概念及工作流程详解
git概念及工作流程详解 既然我们已经把gitlab安装完毕[当然这是非必要条件],我们就可以使用git来管理自己的项目了,前文也多多少少提及到git的基本命令,本文就先简单对比下SVN与git的区别 ...
- python文件相关操作
Python文件相关操作 打开文件 打开文件,采用open方法,会将文件的句柄返回,如下: f = open('test_file.txt','r',encoding='utf-8') 在上面的代码中 ...
- Git 主要的工作流程
Git使用个进制字符的SHA- Hash来唯一标识对象 如:e98757d0598ab6eeaf1df0d87dd00826048bd80b git 有种对象 1.blob 表示文本文件,二进制文件或 ...
- kafka工作流程| 命令行操作
1. 概述 数据层:结构化数据+非结构化数据+日志信息(大部分为结构化) 传输层:flume(采集日志--->存储性框架(如HDFS.kafka.Hive.Hbase))+sqoop(关系型数 ...
- Nodejs文件相关操作
欢迎关注我的博客我在马路边 适用人群 本文适用于刚接触Node的小白,毕竟我也是小白,大佬请绕行. Node文件操作 在实际开发中遇到很多有关文件及文件夹的操作,比如创建.删除文件及文件夹,文件拷贝. ...
- VC++文件相关操作的函数封装实现
在开发编译工具中,需要用到文件的相关操作,于是就封装了相关的函数实现: //判断文件是否存在 BOOL FileIsExist(CString strFileName) { CFileFind fin ...
- [git] git 分支管理和工作流程
分支管理 列举本地分支.下面的 * 是 HEAD 所指向的分支,标识当前工作目录所用的分支.其他分支隐藏在 git 仓库中,通过 git checkout 命令才能访问和修改. $ git branc ...
- 【原创】Linux基础之gz文件相关操作
gz文件不需要解压即可进行相关操作 $ zcat test.log.gz $ zmore test.log.gz $ zless test.log.gz $ zgrep '1.2.3.4' test. ...
- 记录工作中linux相关操作
在项目部署之后,查看日志能查看部署结果是否正确部署. 最开始查看日志我会使用cat service.log tail -f service.log vim service.log 打开日志之后 /+查 ...
随机推荐
- asp:DropDownList 使用
<asp:DropDownList ID="DropDownList1" runat="server" onchange="return My_ ...
- Java+Selenium自动化对非输入框的日历或日期控件的处理
如图: 1.问题描述: 在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这 ...
- 初入TensorFlow————配置TensorFlow
能看到这说明你对python已经有一定的了解了,因此很多基础直接跳过. 一.TensorFlow环境配置: TensorFlow的环境配置在网上很多的教程都是用anaconda的方式,但是很容易出现冲 ...
- 爬取QQ音乐(讲解爬虫思路)
一.问题描述: 本次爬取的对象是QQmusic,为自己后面做django音乐网站的开发获取一些资源. 二.问题分析: 由于QQmusic和网易音乐的方式差不多,都是讲歌曲信息放入到播放界面播放,在其他 ...
- 计算机爱好者协会技术贴markdown第一期
本周爱酱给大家带来的是markdown的介绍和使用哦~ Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式.由于是纯文本,所以可移植性特 ...
- python语言相关语法基础
numpy系列import numpya = numpy.array([[1,2], [3,4]])b = numpy.array([[5,6], [7,8]])a*b>>>arra ...
- Ramnit 蠕虫分析
0x00前言 Ramnit 蠕虫是一种通过可移动驱动器传播的蠕虫.该蠕虫还可以作为后门,允许远程攻击者访问受感染的计算机,通常会寄生在用户的浏览器中,难以察觉,因此每天都有数以万计的用户受其困扰. 分 ...
- dremio jdbc使用
驱动包地址 链接:https://pan.baidu.com/s/1Nivkvze24hRH8pXOQleCgw 提取码:gp9z 使用dremio主要原因 : 1)springboot提供了es组件 ...
- centos7安装ceph-luminous(1 mon+2 osd)
说明:由于环境有限,这里只是用一台机器 一.部署环境 VMware Workstation 10 centos7 二.主机配置 主机名 ip cpu ram master 192.168.137.10 ...
- hadoop HDFS常用文件操作命令
命令基本格式: hadoop fs -cmd < args > 1. ls 列出hdfs文件系统根目录下的目录和文件 hadoop fs -ls /dir hadoop fs -ls -R ...