GIT知识汇总
git 理解
工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
为什么Git添加文件需要add
,commit
一共两步呢?因为commit
可以一次提交很多文件,所以你可以多次add
不同的文件,比如:
$ git add file1.txt 添加到暂存区
$ git add file2.txt file3.txt
$ git commit -m "add 3 files." 提交到版本库
git创建本地仓库及配置
# 1. git初始化:
git init
# 2. git 配置:
git config user.name "name"
git config user.email "email"
# 3. 查看用户及邮箱:
git config user.name
git config user.email
# 4. 查看配置信息:
git config -l
# 5. 设置忽略文件:
新建 .gitignore文件,在这个文件中写入忽略规则。
忽略.class文件:*.class
忽略.idea目录:/.idea
查看日志
# 查看提交的记录
git log
# 一行展示
git log --pretty=oneline
git log --oneline
# 展示修改了哪些文件,修改的内容是什么
git log -p
# 记录你的每一次命令
git reflog
# 图形化界面查看提交记录
gitk
# 查看最近的n次提交
git log -n
# 查看丰富的log
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
--all 显示所有分支
--pretty=oneline 将提交信息显示为一行
--abbrev-commit 使得输出的commitId更简短
--graph 以图的形式显示
git命令取别名
如:git lg
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
本地仓库关联远程仓库
# 本地仓库关联远程仓库
git remote add <远端仓库名称> <远程仓库路径>
例如:git remote add origin git@gitee.com:wpy/git-test.git,其中origin为远程仓库名称,任意取名,一般默认使用origin作为远程仓库名称
# 推送到远程分支(分支不关联)
- git push origin master:master // 推送远程分支
- git push origin master // 如果远程分支名和本地分支名称相同,则可以只写本地分支
# 关联分支(好处:可以省略分支名和远端名,直接使用git push)
- git push -u origin "master" // 同名分支关联,如果远程没有该分支,则创建。
- git push --set-upstream origin master:master // 同名分支关联,如果远程没有该分支,则创建。
- git checkout -b dev origin/dev // 检出远程的dev分支到本地并关联(即:本地没有dev分支,需要切换到dev分支,并拉取远程最新内容。前边的dev代表本地的分支名称。
也可直接看git报错提示:
查看远程库的信息
- 查看远程仓库信息:
git remote
- 查看详细的远程信息:
git remote -v
- 查看远程分支:
git branch -r
- 查看本地及远程所有分支:
git branch -a
- 看当前的本地分支与远程分支的关联关系:
git branch -vv
git clone
# git拉取远程指定分支
$ git clone 远程仓库地址 [-b 远程分支] [本地文件目录]
注意点
# git pull
含义:将远端仓库的修改拉到本地并自动进行合并,如果不指定远端名称和分支名,则抓取所有并更新当前分支。
注意:
1. 工作区和暂存区有内容,则不可以使用git pull
- 解决方案:
- 代码commit后,再git pull
- 本地代码stash暂存后再git pull(commit前的内容都可以暂存)
# git fetch
含义:将仓库里的更新都抓取到本地,不会进行合并。如果不指定远端名称和分支名,则抓取所有分支。
# git push
含义:推送本地版本信息到远程仓库
注意:
1. 本地的commitID必须包含远程的commitID才可以push
# git checkout
注意:
1. 工作区和暂存区有内容,则不可以使用git checkout
- 解决方案:
- 代码commit后,再git checkout
- 本地代码stash暂存后再git checkout(commit前的内容都可以暂存)
冲突
修改了同一个文件,则会产生冲突。
容易产生冲突的几个场景:
- 分支合并的时候
- git pull的时候
- 恢复stash暂存的内容
分支
重点理解:master是一个初始分支,master指向最新的提交,HEAD指向当前分支。
# 1. 创建分支:
git branch dev
# 2. 切换分支:
git checkout dev
# 3. 创建并切换分支:
git checkout -b dev
# 4. 合并分支:
git merge dev
# 5. 删除本地分支:
git branch -d dev
# 6. 强制删除本地分支(没有合并过的分支只能强制删除)
git branch -D dev
# 7. 删除远程分支
删除远程分支方式一:(删除本地及远程分支)
1. 先删除本地分支:git branch -d dev
2. 再推送到远程:git push origin :dev(因为推送到远程分支是:git push origin dev:dev)
删除远程分支方式二:(仅仅只删除远程分支)
git push origin --delete 分支名
分支使用原则
git stash使用
作用:暂存(commit前的内容都可以暂存)
# 暂存
git stash save '暂存名称'
# 查看暂存记录
git stash list
# 恢复指定的暂存工作, 暂存记录保存在list内,需要通过list索引index取出恢复
# pop命令:恢复后,会删除保存在list内记录
git stash pop stash@{index}
# apply命令:恢复后,暂存区域会保留当前的记录
git stash apply stash@{index}
# 删除list内的某个暂存
git stash drop stash@{index}
# 删除全部暂存
git stash clear
撤销git checkout
前提:必须是已经跟踪的文件。若新增一个文件未add跟踪,则不可撤销。
# 1. 缓存区覆盖工作区(放弃工作区的修改,即撤销还没有git add .时内容)
git checkout -- 目录/指定文件/.
# 2. 版本库覆盖工作区,并覆盖缓存区(同时撤销工作区及暂存区)
git checkout 版本号 目录/指定文件/.
# 3. 仅撤销暂存区的内容(不撤销工作区)
- git reset . 撤销所有
- git reset HEAD -- . 撤销所有
- git reset HEAD -- filename 撤销特定目标
版本回退git reset
# 回退上个版本
git reset --hard HEAD^
# 回退10个版本
git reset --hard HEAD~10
# 回退到指定的版本号
git reset --hard <版本号>
向前或向后切换版本(指针的移动)
HEAD表示当前最新版本
HEAD^表示当前最新版本的前一个版本
HEAD^^表示当前最新版本的前两个版本,以此类推...
HEAD~1表示当前最新版本的前一个版本
HEAD~10表示当前最新版本的前10个版本,以此类推...
撤销与回退版本的对比
# git checkout 版本号 .
当前版本号不变,只是将其他版本的内容覆盖到了当前版本
# git reset --hard 版本号
当前版本号指向其他版本号
删除文件
https://www.liaoxuefeng.com/wiki/896043488029600/900002180232448
创建SSH Key
GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了
ssh-keygen -t rsa -C "youremail@example.com"
版本打标签
# 本地打标签:
git tag -a 标签名 -m '标签描述'
# 推送标签到远程仓库:
git push origin 标签名
# 删除本地标签
git tag -d 标签名
# 删除远程仓库标签
git push origin --delete tag 标签名
参考路径: