git的工作流程一般是这样的:
- 使用git add将工作区(workspace)的文件提交到暂存区(Index)
- 使用commit将暂存区(Index)提交到本地仓库(Repository)
在工作中添加,修改文件
将需要进行的版本管理的文件放入暂存区域
将暂存区域文件提交到git仓库
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
上面j讲的是Git的基本配置和项目搭建,接下来才是关于如何操作文件内容
git的4个区
工作区(Working Area)
就相当于我们的工作空间的目录,我们代码本地存放的地方。
暂存区(缓冲)(Stage)
也称作Index,用来跟踪已暂存的文件,一般是存在
.git
下的index文件,所以有时也称暂存区为索引。本地仓库(Local Repository)
远程仓库(Remote Repository)
文件的五种状态
版本控制就是对文件的版本控制,要对文件进行修改,提交等操作,首先要知道文件当前什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
- Untracked:未跟踪,此文件在文件夹中,但并没有加入到git仓库,不参与版本控制.通过git add 状态变为Staged.
- Unmodify:文件已经入库,未修改,即版本库中的文件快照内容与文件夹完全一致.这种类型的文件有两种去处,如果它被修改,而变为Modified.如果使用git rm 移出版本库,则成为Untracked文件.
- Modified(已修改):文件已修改,仅仅是修改,并没有进行其他的操作.这个文件也有两个去处,通过git add可进入暂存staged状态,使用git checkout,则丢弃修改过,返回unmodify状态,这个git checkout即从库中取出文件,覆盖当前修改!
- Staged(已暂存):暂存状态,执行git commit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodify状态.执行git reset HEAD filename取消暂存,文件状态为Modified
- 已提交(Committed)
- 已推送(Pushed)
查看文件状态
上面说的文件的4种状态,通过如下命令可以查看到文件的状态:
1 | #查看制定文件状态 |
忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立“.gitignore”文件,此文件有如下规则:
1.忽略文件中的空行或以井号(# )开始的行将会被忽略。
2.可以使用Linux通配符。例如∶星号(*)代表任意多个字符,问号(﹖)代表一个字符,方括号([abc] )代表可选字符范围,大括号( {string1,string2……})代表可选的字符串等。
3.如果名称的最前面有一个感叹号( !),表示例外规则,将不被忽略。
4.如果名称的最前面是一个路径分隔符(/ ),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
5.如果名称的最后面是一个路径分隔符(/ ),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
例如以下这些实例:
1 | *.txt #忽略所有的.txt结尾的文件 |
git 修改.gitignore后生效
有时在使用过称中,需要对.gitignore文件进行再次的修改。这次我们需要清除一下缓存cache,才能是.gitignore 生效。
1 | git rm -r --cached . #清除缓存 |
配置git账户
1 | git config --global --list # 查看当前git的配置信息 |
连接远程仓库和多远程仓库
- 清除全局设置
1 |
|
生成ssh-key
1
2
3
4#github
ssh-keygen -t rsa -f ~/.ssh/id_rsa.github -C "邮箱"
#gitee
ssh-keygen -t rsa -f ~/.ssh/id_rsa.gitee -C "邮箱"id_rsa.github可以换成你可以辨别的名字,user/.ssh / 下就可以看到生成的文件.
识别 SSH 新的私钥
1
2
3
4
5
6
7
8
9
10
11
12```
# git接管文件夹
```bash
git init # 初始化git仓库 (mac中Command+Shift+. 可以显示隐藏文件)
git status # 查看文件状态
git add # 文件列表 追踪文件
git commit -m # 提交信息 向仓库中提交代码
git log # 查看提交记录
git分支常用命令:
1 | #列出本地所有分支 |
连接远程仓库(可见仓库提供方法)
1 | git remote add origin git@github.com:xxx.git |
查看库
查看该库的本地分支
1 | git branch |
git 查看已经放到本地仓库的文件
1 | git ls-files |
删除 Git 仓库中的文件
1 | $ git rm <filename> |
1 | #查看最后一次提交记录的修改文件信息 |
git文件比较
1 | git diff 命令,默认查看的就是 工作区 和 暂存区之间文件的差异 |
撤回
git checkout 用法总结
git checkout –
git checkout HEAD^ –
git checkout
git restore
git restore —staged
git restore
git reset回退
--soft
、--mixed
以及--hard
是三个恢复等级。
- 使用
--soft
就仅仅将头指针恢复,已经add的暂存区以及工作空间的所有东西都不变。 - 如果使用
--mixed
,就将头恢复掉,已经add的暂存区也会丢失掉,工作空间的代码什么的是不变的。 如果使用
--hard
,那么一切就全都恢复了,头变,aad的暂存区消失,代码什么的也恢复到以前状态。git reset --hard
:进行已修改或者暂存,但未提交文件的回退
1 | git reset --hard head #当前版本 |
git reset --hard origin/master
”进行已提交,但未推送的版本回退- 1:
git reset --hard HEAD^
2:git push -f
这两条命令是进行已提交且推送的回退,git reset --hard HEAD^
为先回退到上一个版本git push -f
是进行强制推送,覆盖远程分支。
github访问
1 | # hosts文件修改:C:\Windows\System32\drivers\etc\hosts |
换行符警告和解决
最简单的一种办法就是把自动转换功能
关掉即可。
输入命令 :git config core.autocrlf false
(仅对当前git仓库有效)git config --global core.autocrlf false
(全局有效,不设置推荐全局)
修改gitigone后生效
1 | git rm -r --cached . #清除缓存 |