Git 笔记
1、简介
Git
是一种分布式版本控制系统
2、官网
https://git-scm.com/
3、SVN和Git的区别
SVN
-
优点
- 采用集中式,保证安全性
- 管理方便,逻辑明确
- 代码的一致性高
- 适合人数不多的项目开发
-
缺点
- 服务端单点故障
- 必须连接SVN服务器上,否则不能对比,提交,还原。
- 没有本地仓库
- 不适合开源开发
Git
- 优点
- 有本地仓库,可以离线工作
- 公共服务器压力和数据量都不会太大
- 速度快,灵活
- 分支操作非常流畅
- 缺点
- 学习成本高
- 代码保密性查
4、.git的作用
用来跟踪管理版本库的
5、工作流程
- 代码优先初始化:git init
- 代码然后通过git add 提交到暂存区
- 再通过暂存区通过git commit 提交本地库
- 最后使用git push 推送远程仓库
6、查看SSH密钥
cd ~
rm -rvf .ssh
ssh-keygen -t rsa -C 邮箱地址
cat ~/.ssh/id_rsa.pub
7、开发者用户名和邮箱
# 设置
git config user.name 霖雨
git config user.email 1931063095@qq.com
# 删除
git config --unset user.name
git config --unset user.email
8、系统全局用户名和邮箱(推荐)
# 设置
git config --global user.name test
git config --global user.email test@qq.com
# 删除
git config --global --unset user.name
git config --global --unset user.email
9、配置别名
# 配置别名
git config --global alias.co checkout
git config --global alias.ss status
git config --global alias.cm commit
git config --global alias.br branch
git config --global alias.rg reflog
# 这里只是美化 log 的输出,实际使用时可以在 git lg 后面加命令参数,如:git lg -10 显示最近10条提交
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
10、其他
# 查看开发者用户名和邮箱
cat ~/.gitconfig
# 查看系统配置
git config --list
# 查看当前项目的 git 配置
cat .git/config
# 查看暂存区的文件
git ls-files
# 帮助命令
git --help -a
# 拉取、上传免密码
git config --global credential.helper store
# 删除工作区/暂存区的文件
git rm [file1] [file2] ...
# 停止追踪指定文件,但该文件会保留在工作区
git rm --cached [file]
# 改名工作区/暂存区的文件
git mv old.txt new.txt
# 建立当前分支和远程分支的追踪关系
git push -u origin master
# 删除远程分支
git push origin --delete master
# 将本地的所有分支都推送到远程主机
git push --all origin
# 创建一个空白分支,先把当前分支的内容全部删掉
git rm -rf .
# 再创建
git checkout --orphan 空的分支名
11、普通命令
# 初始化
git init
# 查看状态
git status
# 提交到暂存区
git add .
# 如果有错的情况下,移除暂存区
git rm --cached hello.txt
# 提交本地库
git commit -m "首次提交"
# 查看日志(HEAD:指针):提交记录可能会非常多,按 J 键往下翻,按 K 键往上翻,按 D 键往下页,按b往上翻页,按空格往下翻页,按 Q 键退出查看
# oneline -> 将日志记录一行一行的显示
# grep="关键字" -> 查找日志记录中(commit提交时的注释)与关键字有关的记录
# graph -> 记录图形化显示 !!!
# all -> 将所有记录都详细的显示出来
# author "username" -> 查找这个作者提交的记录
# reverse -> commit 提交记录顺序翻转
# before -> 查找规定的时间(如:1天/1周)之前的记录
# num -> git log -10 显示最近10次提交 !!!
# stat -> 显示每次更新的文件修改统计信息,会列出具体文件列表 !!!
# abbrev-commit -> 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符 !!!
# pretty=format:"xxx" -> 可以定制要显示的记录格式 !!!
# p -> 显示每次提交所引入的差异(按 补丁 的格式输出)!!!
git log --oneline
--grep="关键字"
--graph
--all
--author "username"
--reverse
-num
-p
--before= 1 day/1 week/1 "2019-06-06"
--after= "2019-06-06"
--stat
--abbrev-commit
--pretty=format:"xxx"
# 查看日志(HEAD:指针):显示版本历史信息回滚步数
git reflog
# 切换版本号
git reset --hard 版本号
# 永久删除的文件恢复
git add test.txt
git commit -m "new file"
rm test.txt
git add test.txt
git commit -m "恢复"
git reflog
git reset --hard 51acbc2
# 绑定远程仓库
git remote add origin https://github.com/q-linyu/test.git
# 查看远程仓库的别名
$ git remote -v
origin https://github.com/q-linyu/test.git (fetch)
origin https://github.com/q-linyu/test.git (push)
# 推送远程仓库 or 强行推送
git push -u origin master | git push origin master -f
# 克隆/把远程的代码拉到本地来
git clone https://github.com/q-linyu/test.git
12、日志无法显示中文问题
git -c core.pager=more log
# 如果可以显示中文的话,把 pager 设置为 more
git config --global core.pager more
13、项目标记里程碑
# 项目上线发布的时候用,做一个标记
git tag
14、分支的含义
在版本控制过程中,使用多条线同时推进多个任务
14-1、分支的好处
- 同时并行推进多个功能开发,提高开发效率
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可
14-2、分支
# 查看分支
git branch
# 查看所有分支的最后一次操作
git branch -v
# 查看当前分支
git branch -vv
# 新建分支
git branch 分支名
# 切换分支
git checkout 分支名
# 删除本地分支
git branch -d 分支名
# 强行删除分支
git branch -D 分支名
# 删除远处仓库分支
git branch origin:分支名
# 合并分支
git checkout master
git merge 要合并的分支名 -m "描述"
# or
git merge 要合并的分支名 --no-ff
15、把远程库的数据推送到本地库
# 方式一
git fetch origin master
git checkout origin/master
git log -p master.. origin/master
git checkout master
git merge origin/master
# 方式二
git pull origin master
16、暂存区操作大全
# 将所有未提交的修改(提交到暂存区)保存至堆栈中
git stash
# 给本次存储加个备注,以防时间久了忘了
git stash save "存储"
# 存储未追踪的文件
git stash -u
# 查看存储记录
$ git stash list
在 Windows 上和 PowerShell 中,需要加双引号
# 恢复后,stash 记录并不删除
git stash apply "stash@{index}"
# 恢复的同时把 stash 记录也删了
git stash pop "stash@{index}"
# 删除 stash 记录
git stash drop "stash@{index}"
# 删除所有存储的进度
git stash clear
# 查看当前记录中修改了哪些文件
git stash show "stash@{index}"
# 查看当前记录中修改了哪些文件的内容
git stash show -p "stash@{index}"
17、文件对比
# 查看工作区和暂存区单个文件的对比
git diff filename
# 查看工作区和暂存区所有文件的对比
git diff
# 查看工作区和暂存区所有文件的对比,并显示出所有有差异的文件列表
git diff --stat
# 查看暂存区与上次提交到本地仓库的快照(即最新提交到本地仓库的快照)的对比
git diff --cached/--staged
# 查看工作区与上次提交到本地仓库的快照(即最新提交到本地仓库的快照)的对比
git diff branchname
# 查看工作区与 HEAD 指向(默认当前分支最新的提交)的对比
git diff HEAD
# 查看两个本地分支中某一个文件的对比
git diff branchname..branchname filename
# 查看两个本地分支所有的对比
git diff branchname..branchname
# 查看远程分支和本地分支的对比
git diff origin/branchname..branchname
# 查看远程分支和远程分支的对比
git diff origin/branchname..origin/branchname
# 查看两个 commit 的对比
git diff commit1..commit2
18、远程仓库操作
# 查看所有远程主机
git remote
# 查看关联的远程仓库的详细信息
git remote -v
# 删除远程仓库的 “关联”
git remote rm projectname
# 设置远程仓库的 “关联”
git remote set-url origin <newurl>
18、发布标签
# 默认在 HEAD 上创建一个标签
git tag v1.0
# 指定一个 commit id 创建一个标签
git tag v0.9 f52c633
# 创建带有说明的标签,用 -a 指定标签名,-m 指定说明文字
git tag -a v0.1 -m "version 0.1 released"
# 查看所有标签
# 注意:标签不是按时间顺序列出,而是按字母排序的。
git tag
# 查看单个标签具体信息
git show <tagname>
# 推送一个本地标签
git push origin <tagname>
# 推送全部未推送过的本地标签
git push origin --tags
# 删除本地标签
# 因为创建的标签都只存储在本地,不会自动推送到远程。
# 所以,打错的标签可以在本地安全删除。
git tag -d v0.1
# 删除一个远程标签(先删除本地 tag ,然后再删除远程 tag)
git push origin :refs/tags/<tagname>
19、.gitignore 配置详情
#java
*.class
#package file
*.war
*.ear
*.zip
*.tar.gz
*.rar
#maven ignore
target/
build/
#eclipse ignore
.settings/
.project
.classpatch
#Intellij idea
.idea/
/idea/
*.ipr
*.iml
*.iws
# temp file
*.log
*.cache
*.diff
*.patch
*.tmp
# system ignore
.DS_Store
Thumbs.db