git 笔记
学习视频传送门
基本概念图解传送门
使用git进行版本管理图解传送门
准备
1.git命令行工具或者图形化工具
2.github账号
配置命令
1.git config --global user.name 查看用户名
2.git config --global user.email 查看用户email
3.git config --global color.ui true 默认的命令行颜色颜色配置
提交
4.1.进入已经完成的项目文件夹。
4.2.git init [项目仓库名] 建立本地git仓库。
4.3.git status 显示一些可以提交的文件名,以及它们的状态。
4.4.git add [文件名],[文件名]... 将文件放到暂存区。用户随意处理暂存区,最后统一上传。
4.5.git commit -m "上传的信息" 上传,并说明上传内容。
代码修改
5.1.git diff 查看已经修改完的代码与暂存区里的文件相比,哪行有变动。红色-表示改变前,绿色+表示改变后。
5.2.git diff --staged 查看已经修改完并add的代码和已经commit的代码比,有哪些改动。
5.3.git diff HEAD 若暂存区文件已修改未提交,源文件也修改了,使用这个命令查看最后一次修改和最后一次提交的改动部分,中间的改动忽略。
5.5.git diff --color-words/--word-diff 上面的改动都是以行为单位,这次以单词为单位,color-words表示用颜色表示改动,word-diff表示用单词表示改动。
5.6 git diff --stat 查看哪些文件有修改,不会查看修改的具体细节。
日志
6.1.git log 提交commit的历史,上面的是最新提交,下面的是最早提交。
第一行是提交者的用户名和email地址。
第二行是提交日期
第三方是提交的具体内容。
6.2.git log --oneline 提交的简要说明,由用户自己写的。
6.3.git log --stat 文件级别的变动日志。
6.4.git log --patch 代码级别的变动日志。
6.5.git log --patch --oneline 组合命令查看日志。
6.6.git log --graph/--ascii 查看提交的结构或二进制
6.7.git log --all -- graph --decorate --oneline 建议的查看方式
6.8.git reflog 记录commit前进后退30天的记录,以后可以进行回退,使用每行的哈希码回退
删除文件
理解删除文件操作之间,因理解操作的逻辑。
7.1.若删除工作区文件,且版本库repository不存在该文件,直接rm就行。
7.1.1.rm 文件名 删除工作区
7.2.若删除工作区文件,且版本库中存在该文件,这要分情况。
· 方法一:rm + git rm
7.2.1.rm 文件名 删除工作区文件
7.2.2.git rm 文件名 定义一个删除操作,准备提交给版本库
7.2.3.git commit -m "delete file" 将所有操作提交给版本库,这是版本库中的该文件已经被删除
方法二:git rm
7.2.4.git rm 文件名 删除工作区的文件,并定义删除操作
7.2.5.git commit -m "delete file" 将所有操作提交给版本库,这是版本库中的该文件已经被删除
7.3.git rm --cached 文件名 定义删除版本库中的文件的操作,但是保存工作区中的文件
移动
8.1.git move old_path new_path 移动/重命名
8.2.git add -A . 将该目录下的所有的修改,移动,创建操作提交到暂存区
8.3.git add . 接近于git add -A . 但是不提交已经删除的文件
8.4.git add -u . 将该目录下的所有已修改的文件放到暂存区,仅监控已经存在于暂存区的文件
8.5.若修改文件后移动,git把它看成文件移动
8.6.git log --stat -M --follow -- 文件名 文件移动日志
8.7.git commit后的百分数是指提交前后版本库中文件的相似度。删除前后文件的默认阈值是50%,低于50%?则不同文件有可能被定义为同种文件
如何判断修改前后的文件是不是同一个文件?
1.CVS认为文件一旦移动,原文件就被破坏,无法追踪它了
2.不管怎么修改移动,都是同一个文件
3.Git可以改变相似度观点,在 git log -M中修改,具体再作了解
忽略
9.1.建立.gitignore文件 文件里面存储忽略的文件名,表示该文件不参与暂存区和版本库中
9.2.在.gitignore文件中,写文件名,进行忽略。
技巧:
1.若忽略.java结尾的所有文件,文件名写成*.java
2.若某个文件不能忽略,文件名写成 !文件名
3.若要描述或者评论某忽略的文件,需要在评论前叫上#
9.3.git ls-files --other --ignored --exclude-standard 查看已经忽略的所有文件
9.4.注意,忽略的文件必须不包含在暂存区或者版本库中
分支
分支的基本概念传送门
10.1.git branch 新分支名 创建一个新分支,以后可以进行切换
10.2.git branch -d 分支名 删除一个分支,必须切换到其它分支上,才能删除该分支
10.3.git checkout 分支名 切换一个分支,若覆盖文件,必须提交才能切换。
10.4.git branch 查看当前处于的分支位置,默认为绿色
10.5.git status 也可以查看正在运行的分支
10.6.git checkout -- 文件名 恢复文件原来的状态,工作区文件也生效
10.7.git checkout -b 分支名 创建分支并切换到该分支
合并
把多个分支合并起来
11.1.git checkout master 进入master分支
11.2.git branch 查看所有分支
11.3.git merge 分支名 将一个分支合并到master分支中,master分支中包含了该分支的文件,修改和历史,若两个分支很多文件类似,那就自己打开文件进行修改即可。
11.4.git merge --abort 返回合并前的状态
11.5.git merge --squash 减少合并时的commit记录数
11.6.git rebase 分支名 把归并的分支的commit落到分支的最新位置,工作流是一条直线,方便查看
远程网络
必须在一个已经建立的本地库上操作。
12.1.git remote add origin url地址 添加远程仓库名和地址
12.2.git remote set-url origin url地址 修改远程仓库名对应的地址
12.3.git remote rm url 删除远程仓库名
12.4.git remote -v 查看远程地址和名字
12.5.git fetch origin 下载信息,并追踪
12.6.git branch -r 查看远程url的分支
12.7.git pull origin 下载信息到本地并合并
12.8.git push origin 上传信息到远程并合并
回退
13.1.git reset --soft HEAD~n 回退n次提交
13.2.git reset --mixed HEAD~n 回退n次提交
13.3.git reset --hard HEAD~n 回退n次提交
简单总结一下,其实就是--soft 、--mixed以及--hard是三个恢复等级。使用--soft就仅仅将头指针恢复,已经add的缓存以及工作空间的所有东西都不变。如果使用--mixed,就将头恢复掉,已经add的缓存也会丢失掉,工作空间的代码什么的是不变的。如果使用--hard,那么一切就全都恢复了,头变,aad的缓存消失,代码什么的也恢复到以前状态。
完
注:视频中4集github部分未做笔记。