git 基本命令
git init
初始化仓库
git add <filename>
加入暂存区
git add .
将所有文件加入暂存区
git commit -m <messeage>
提交文件到本地仓库 message为对该次提交的描述
git reset <filename>
移出暂存区
alias
别名
git安装目录 gitconfig
文件可以设置alias
git reflog
可查看commitID
git checkout -b <name> <template>
创建新的分支
<name>
新分支的名字 <template>
以哪个分支或者commit为模板
不填则默认以当前分支为模板
git checkout <branchname>
切换到指定分支
git branch
查看所有分支
git 回滚
git reset <commitID>
回退
1.已提交,没有push
git reset --soft
撤销commit
git reset --mix
撤销commit和add两个动作
2.已提交,并且push
git reset --hard
撤销并舍弃版本号之后的提交记录,文件将还原为所选提交的状态git revert
文件还原为所选提交状态 本地变更保持不变
文件状态:
1.没有被add过的文件叫untracked
2.add之后文件处于staged状态等待commit
3.commit之后文件处于unmodified这里之所以是modified是因为文件会跟仓库中的文件对比
4.当unmodified的文件被修改则会变为modified状态
5.modified之后的文件add之后将继续变为staged状态
6.unmodifed的文件还有一种可能是已经不再需要了,那么可以remove它不再追踪变为untracked状态
- git flow工作流
- git rebase 和 merge (合并和变基)
.gitignore不生效
原因:
1).gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
2)想要.gitignore起作用,必须要在这些文件不在暂存区中才可以,.gitignore文件只是忽略没有被staged(cached)文件, 对于已经被staged文件,加入ignore文件时一定要先从staged移除,才可以忽略。
解决方案
先把本地缓存删除,然后再进行git的提交
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
git push -u origin master
第二种方法(未测试)
手动设置不要检查特定文件的更改情况。
git update-index --assume-unchanged PATH //在PATH处输入要忽略的文件
Git中CRLF与LF的转换
通过Git的全局配置进行修改
此种方式修改的是自己电脑的git的全局配置
- 设置autoclf属性
// 提交时转换为LF,检出时转换为CRLF
git config --global core.autocrlf true
// 提交时转换为LF,检出时不转换
git config --global core.autocrlf input
// 提交检出均不转换
git config --global core.autocrlf false
- 开启safecrlf检查
// 拒绝提交包含混合换行符的文件 (一般设置为true)
git config --global core.safecrlf true
// 允许提交包含混合换行符的文件
git config --global core.safecrlf false
// 提交包含混合换行符的文件时给出警告
git config --global core.safecrlf warn
通过.gitattributes进行修改(更推荐)
.gitattributes是针对一个单一的仓库的,也就是说每一个代码仓库都可以包含一个.gitattributes文件。这种方式设置之后,不需要一个项目组里面的同事分别再去修改自己电脑的git的全局配置。
1. text=auto:采用git认为最好的方式来处理文件,未在.gitattributes中
设置的项默认按照这种方式处理;(If Git decides that the content
is text, its line endings are converted to LF on checkin.
When the file has been committed with CRLF, no conversion
is done.)git发现是文本文件,那么在checkin的时候,会将文件结尾符转
换为LF。果文件已经被已CRLF的形式提交(就是说已经在Gti仓库中的文件,如
果结束符是CRLF,不会有任何的转换),不会有任何转换。
2. -text 表示让git在checkin以及checkout的时候,对end-of-line不
做任何转换。
3. text 表示在checkin的时候会被转换为LF(在repository中的文件结束
符是LF),如果需要控制在checkout的时候的换行符,需要结合eol进行设置
(也就是 控制working tree中的文件的结尾符,需要通过eol设置)。
text=auto和text的区别在于,text=auto由git来确定是不是文本文件,
从而进行转换;而text表示,你确定这个path就是文本文件,会直接对这个
path进行转换,而不是有git来decides是否转换。
4. 如果没有指定text,git会使用全局配置中的core.autocrlf来进行eol
的转换。core.autocrlf需要自己在自己的电脑上进行配置。
5. eol=crlf:对左边匹配的文件统一使用CRLF换行符格式,如果有文件中出现LF将会转换成CRLF;也就是说,在checkin和checkout的时候,文件中都是CRLF,
LF会被转换为CRLF。
7. eol=lf:对左边匹配的文件统一使用LF换行符格式,如果有文件中出现CRLF将会转换成LF;也就是说,在checkin和checkout的时候,文件中都是LF,
CRLF会被转换为LF。
8. binary: 告诉git该文件为二进制,防止git修改该文件。git不会对对其中的换行符进行改变。
注意:.gitattributes文件必须要提交之后才能生效。