一、git 基础概念1.
1.1 三种状态:
工作区(unstage)——已修改(modified)
暂存区(stage)——已暂存(staged)
对象区——已提交(commited)
工作区---add----暂存区----commit----对象区---push---git服务器
1.2,git init:将该路径纳入git管理
版本库删除:rm -rf .git
1.3,git status 查看状态
在哪个分支、是否提交、是否跟踪
1.4,工作区--->暂存区:git add hello.txt
1.5,工作区<---暂存区:git rm --cachede hello.txt
1.6,暂存区--->对象区:git commit -m "message"
1.7,工作区<---对象区:修改hello.txt
1.8,git log:查看git log日志;
git log -n 最近的次数】
git log --pretty=oneline
1.9,sha1值:md5加密算法随机数 分布式id生成器,用于区分哪一次提交,并且不重复
二、git操作与系统操作及ignore
2.1 git rm 删除文件会到暂存区:(1) 删除,(2)暂存区
>git rm b.txt
>如果彻底删除:git commit -m "彻底删除b.txt"
系统命令rm:删除到工作区
2.2 后悔操作:
(1)恢复工作区
git reset HEAD b.txt
(2)checkout
git checkout -- b.txt
通过git status查看再哪个区
2.3 修改注释
git commit --amend -m "修正" #修正前一次commit
2.4 忽略文件git ignore
创建ignore:touch .gitignore
vi .gitignore,将要忽略的文件写入
通配符:
(1) * 任意字符:*.properties
(2) !与 * 一起使用:
*.properties
!b.properties
(3) 目录
dir/ 忽略文件夹
dir/*.txt
dir/**/*.txt 忽略任意级目录
默认忽略空文件夹
2.5 分支:开发到一半建分支
(1)查看分支:git branch
(2)创建分支:git branch xx
(3) 切换分支:git checkout xx分支
(4)删除分支:git branch -d xx分支 (不能删除当前分支,如果存在未合并分支,不能删除。删除之前,建议先合并。-D 强行删除)
(5)先创建分支并切换:git checkout -b new-branch
(6)合并分支:git merge new-branch
(7)新分支写操作
如果文件在新分支a中进行了写操作,但并没add和commit,在master中可以看到A中的写操作,如果进行了commit,master就无法看到。
如果文件在新分支a中进行了写操作,但并没add和commit,如果删除分支,是可以成功的。
(8)git branch -v
分支最近一次sha1值的前几位。
分支:是一个commit链,工作记录线。
分支名:master 指向当前的提交commit
HEAD指向当前分支
cd .git
cat HEAD 可以看到HEAD的指向分支
(9)master合并bev:通过合并直接追赶bev——fast forward 分支指针的移动
git checkout master
git merge bev (会复制bev中间的过程。master和bev指向同样的commit)
fast forward:1-两个分支会归于一点,2-会丢失分支信息
git 在merge时,默认使用fast forward,
也可以禁止:git merge --no-ff ,1-两个分支不会归于一点,主动合并分支会前进一步
2-分支信息完整,不会丢失分支信息
(10)合并:如果冲突,需要解决冲突,merge 默认fast forward
merge 冲突:1-先修改vi ,2-git add完,再次提交
现在的git add不是从工作区到暂存区,这里的add只是告知git,解决冲突。
git add a.txt
git commit -m "解决冲突"
解决冲突时,需要感知bev内容,会触发bev操作,所以会把bev的b7d9f的操作一起合并过去。
(注意:master在merge时候,如果遇到冲突并解决,则解决冲突会进行2次提交,1次是最终提交,1次是将对方的提交信息也拿来。)
解决完冲突,master的内容,仍然与bev不同。master比bev先一步。
如果此时bev去合并master,是否会冲突?此时不会再报冲突。
如果落后一方合并前面一方,则不会冲突。如果两方不是处在一条链上进行合并,则合并会冲突。
(11)git log --graph 图形法验证。
git log --graph --pretty=oneline --abbrev-commit
2.6,版本回退 版本穿梭,在多个commit之间穿梭:回退、前进
git commit -am "先add再commit",第一次不能用
回退到2次commit:git reset --hard HEAD^^ 几个^回退几次
回退到前n次commit:git reset --hard HEAD~n
回退到前某一次commit:git reset --hard 803c9 (sha1值的前几位)
git reset之后,后面的git log记录都不见了,如果想回到后面某一分支,可通过下面操作:
git reflog:查看log记录,记录所有操作,帮助我们实现后悔操作,借助于良好的commit注释习惯
git reset --hard sha1
2.7 checkout放弃修改,放弃的是工作区的修改,相对于暂存区
git reset HEAD a.txt
reset:将之前增加到暂存区的内容,回退到工作区
checout :版本游离