git文件的生命周期
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git文件的生命周期相关的知识,希望对你有一定的参考价值。
参考技术A 工作目录下的文件有两种状态:untrack(未跟踪)和已跟踪(tracked).未跟踪文件是指在上次快照中没有记录,在下次要提交的快照即暂缓区也没有记录的文件。
已跟踪文件是指已被纳入版本控制的文件,可以是已上传到远程仓库的文件,可以是已修改但未暂缓区的文件,可以是放入暂缓区的文件。
从远程仓库克隆一个项目到本地,刚克隆下来时,所有的文件都未被修改,是最初始的状态,因为文件都已在远程仓库,所以此时文件属于已跟踪状态。
当对某个文件做了修改之后,git将这些文件标记为已修改的文件,然后放入暂缓区,然后提交暂缓区的快照。
文件生命周期如下图:
git status : 用来查看文件状态的命令
以一个例子来说明:
首先,从远程克隆一个项目到本地:git clone url #git仓库地址
1.刚克隆下来时,文件状态查看
此时,暂缓区无文件,无文件被修改,所有文件都是已跟踪状态。
2.创建一个不存在的新文件test.txt,查看此时文件状态
可见,文件在untracked files下面,处于未被跟踪的状态,红色显示。未跟踪意味着之前的快照提交记录中没有这个文件,git不会自动讲从未跟踪过的文件自动添加到暂缓区,需要手动告诉它需要跟踪这个文件。当然,如果不需要跟踪,就不需要告诉它。添加到暂缓区需要用到命令 git add 文件
此时,文件出现在changes to be committed,说明是已被跟踪状态(属于已修改未提交,处于暂缓区的情况),绿色显示。这些文件将在下一次快照提交时提交。
3.处在暂缓区的文件提交
git commit是提交暂存区的文件快照。commit完之后查看文件状态
文件全部已跟踪(已提交到git存储库,但未推送到仓库),但是根据提示还未推送,推送完成即可永久保留在远程仓库中。
4.文件被跟踪过,本次版本做了修改
该文件已被跟踪,在历史版本快照中有记录,做了修改后,可见在 changes not staged for commit下面。说明,文件内容做了修改但是未存到暂存区,属于已跟踪未放到暂存区(not staged)。可使用git add将文件放到暂存区。所以,git add可以用来跟踪新文件,也可以把已跟踪文件放到暂存区。
5.文件推送到git仓库
git push origin master
推送完成后在远程仓库可看到新增的文件,git status 查看此时状态
工作目录非常干净,暂缓区无文件,无文件被修改,所有文件都是已跟踪状态。
Git使用
目录
Git
配置
配置文件
以下配置中若出现相同配置项,根据顺序从下到上依次覆盖
级别 | 命令 | 配置文件 |
---|---|---|
全局 | system | /etc/gitconfig |
用户 | global | ~/.gitconfig |
项目 | local | /etc/gitconfig |
基本命令
- 查看全局所有配置:
git config --list --global
- 查看某一项配置:
git config user.name
- 设置用户名:
git config --global user.name ‘yangqingjun‘
- 设置邮箱名:
git config --global user.email ‘yangqingjun001@hotmail.com‘
- 重置某项配置:
git config --unset --global user.name
- 添加别名:
git config --global alias.co checkout
获取帮助
- 获取某个命令帮助
git help add
git add --help
man git-add
- 获取所有命令名称:
git help -a
- 获取所有手册名称:
git help -g
基本操作
获取 Git 仓库
空目录中初始化项目
- 初始化新仓库命令:
git init
- 添加跟踪文件:
git add LICENSE
- 添加某类文件:
git add *.c
- 添加所有文件:
git add .
克隆现有仓库
克隆仓库会将远程目标中所有分支、文件全部克隆下来
- 克隆远程仓库:
git clone https://github.com/libgit2/libgit2
- 克隆远程仓库并重命名:
git clone https://github.com/libgit2/libgit2 test
文件生命周期
- 查看当前文件状态:
git status
- 追踪新文件:
git add newfile
- 状态简表:
git status -s
符号 | 说明 | 文件所在区 |
---|---|---|
?? | 未追踪 | 工作区 |
A_ | 新追踪 未提交 | 暂存区 |
AM | 新追踪 未提交 又修改 | 暂存区、工作区 |
_M | 提交过 刚修改 | 工作区 |
M_ | 提交过 已暂存 | 暂存区 |
MM | 提交过 暂存过 又修改 | 暂存区、工作区 |
查看修改区别
- 查看工作区和暂存区区别:
git diff
- 查看暂存区和提交区区别:
git diff --staged
提交更改
- 提交暂存区的内容:`git commit -m ‘init‘
- 跳过暂存区直接提交:`git commit -am ‘init‘
移除文件
不追踪文件,删除文件
- 删除之前未修改过:
git rm test.txt
- 删除之前已修改且提交到暂存区:
git rm -f test.txt
不追踪文件,保留文件
- 将已追踪的文件放弃追踪:
git rm --cached test.txt
- 在忽略文件中写入,用来放弃追踪
移动文件
git mv file1.txt file2.txt
不追踪的文件
配置文件
在根目录下的 .gitignore
文件中描述
全局配置
- 全局配置命令:
git config --global core.excludesfile ~/.gitignore
- 全局忽略文件参考:https://github.com/yangqingjun/gitignore/blob/master/.gitignore
特定项目
- 项目特定语言参考:https://github.com/yangqingjun/gitignore
匹配规则
- 所有空行或者以 # 开头的行会被Git忽略
- 以 / 开头防止递归。eg:/TODO 只忽略 TODO 文件,而不是文件夹
- 以 / 结尾指定目录。eg:build/ 忽略 build/ 下所有文件
- doc/*.txt 只忽略此目录下的
- doc/**/*.pdf 忽略doc目录下所有的
符号 | 说明 | 例子 |
---|---|---|
* | 零或多个任意字符 | *.py doc/*.txt |
** | 任意中间零个或多个目录 | a/**/z |
? | 有且仅一个任意字符 | hello?.txt |
[abc] | 方框内任意一个 | |
[0-9] | 方框范围内任意一个 | |
! | 追踪指定文件、忽略以上规则 | !index.py |
分支操作
远程操作
GitHub
GitLab
图解
文件生命周期
常用命令
- add: 添加内容到暂存区;添加内容到下次提交中
参考
- 安装Git参考:https://git-scm.com/book/zh/v2/起步-安装-Git
- Linux各版本安装命令:https://git-scm.com/download/linux
- 各编程语言忽略的文件参考:https://github.com/yangqingjun/gitignore
其他配置
全局颜色 git config --global color.ui true
查个mac快捷键 命令行输入 打开finder
open .
查看区别-工作目录与暂存区
git diff index.html
查看区别 工作目录与提交完成的
git diff --staged
删除不追踪的文件
git rm style.css
修改文件名
git mv file1 file2
删除文件
git rm file1
恢复删除文件,最近一次提交
目前还在工作区,未提交状态
git checkout HEAD -- index.html
已经提交
git checkout HEAD^ -- index.html
查看日志,一行
git log --oneline
恢复提交
git revert fsdgj
控制指针位置
git reset fsdgj
--soft 软重置,不影响工作区和暂存区
--hart 工作区和暂存区都重置
--mixed 默认的 只重置暂存区
git stash save ‘放到工作进度里‘
显示工作进度列表
git stash list
查看区别
git stash show -p stash@{0}
恢复进度
git stash apply stash@{0}
删除进度
git stash drop stash@{0}
git stash pop stash@{0}
日志
查看最近5条
git log --oneline -5
查看某个作者提交的
git log --oneline --author="yangqingjun"
所有包含 index 的提交
git log --oneline --grep=‘index‘
某个日期之前的提交
git log --oneline --before=‘2019-01-01‘
三天前的
--before=‘3 days‘
图形界面查看
git log --oneline --graph
分支
查看当前分支
git status
查看所有分支
git branch
创建分支
git branch mobile-feature
切换分支
git checkout mobile-feature
显示分支的提交
git log --oneline --decorate
显示所有分支提交详情
git log --oneline --decorate --all
对比两个分支区别
git diff master..mobile-feature 后面可以加上文件名
合并分支
在master分支上
git merge mobile-feature
以上是关于git文件的生命周期的主要内容,如果未能解决你的问题,请参考以下文章