Git使用教程
从大一就开始用git了,但是一直以来都是想到哪用到哪,时间一长一些命令就容易忘,这次就系统地记录一下git命名,也方便后续查询
在这里推荐一个可视化学习Git的网站
Git基本概念
git工作区
工作区就是当前git的仓库的目录,工作区独立于各个分支
git版本库
git将所有版本通过一棵有向树的形式存储,存放所有已经提交到本地仓库的代码版本
git暂存区
git暂存区是工作区和版本库之间的缓冲区,工作区在向版本库更新时不会直接放入,而是先放入暂存区,最后将暂存区中的内容放入版本库。注意到暂存区是git的一个公共区域,无论当前所处的分支在何处,暂存区都是一样的
HEAD节点
当前版本所在的节点,每次创建时向head后加入节点并将内容放入其中
Git文件状态
首先对于任何一个文件,在Git内都只有四种状态
- 未跟踪 (untracked)
表示没有跟踪 (add) 某个文件的变化,使用 git add 即可跟踪文件
- 未修改 (unmodified)
表示某文件在跟踪后一直没有改动过或者改动已经被提交
- 已修改(modified)
表示修改了某个文件- 但还没有加入 (add) 到暂存区中
- 已暂存 (staged)
表示把已修改的文件放在下次提交 (commit) 时要保存的清单中
Git常用命令
git config设置
用于设置git全局信息
git config --global user.name xxx
设置全局用户名,信息记录在~/.gitconfig文件中
git config --global user.email xxx@xxx.com
设置全局邮箱地址,信息记录在~/.gitconfig文件中
git init 配置仓库
git init
将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中
git add 将文件存入暂存区
git add XX
将XX文件添加到暂存区
git add .
将所有已修改状态文件加入暂存区
git commit 将暂存区内容提交到分支
git commit -m "给自己看的备注信息"
commit后暂存区清空
git status 查看当前仓库状态
git status
用于查看当前仓库跟对应HEAD版本是否存在改动
git diff 查看文件相对于暂存区的改动
git diff
当工作区有改动,暂存区为空,diff的对比是“工作区与最后一次commit提交的仓库的共同文件”;当工作区有改动,暂存区不为空,diff对比的是“工作区与暂存区的共同文件”
git rm --cached xx 删除仓库git文件索引
git rm --cached XX
删除索引后,文件不再受git管理
未跟踪状态
git rm xx 同时从工作区和索引删除文件
git rm xx
git restore 撤销工作区更改不改变暂存区内容
git restore xx
该命令将已修改文件变为未修改文件(包括删除),若暂存区有已修改文件,则恢复至暂存区文件,否则为原始版本
git restore --stage 撤出暂存区内容
git restore --stage xx
将暂存区的文件从暂存区撤出,但不会更改文件的内容
将文件从已暂存恢复到已修改
git log 查看分支
git log
查看当前分支的所有版本
从空走到当前节点的路径
git reset --hard 回滚版本
git reset --hard HEAD^ 或 git reset --hard HEAD~
将代码库回滚到上一个版本
git reset --hard HEAD^^
往上回滚两次,以此类推
git reset --hard HEAD~100
往上回滚100个版本
git reset --hard 版本号
git reflog 查看HEAD指针移动历史
git reflog
查看HEAD指针的移动历史(包括被回滚的版本)
git checkout
git checkout
功能同git restore一致
git remote add origin git@xxx: 关联本地仓库
git clone git@github.com:xxx/XXX.git
建立本地仓库与云端仓库的映射
git clone 下载远程仓库
git clone git@github.com:xxx/XXX.git
将文件下载到本地
git branch 查看所有分支和当前分支
git branch
git checkout -b 创建并切换分支
git checkout -b branch_name
当前的分支内容与上一个节点内容一致
git checkout 切换到某个分支
git checkout branch_name
git merge 合并分支
git merge branch_name
将分支branch_name合并到当前分支上(本质上是修改引用)
git branch -d 删除分支
git branch -d branch_name
git branch 创建新分支
git branch branch_name
git push 推送分支
首次推送时要先建立本地仓库与远程仓库主分支的映射关系
git push -u origin master
其中origin表示服务器端,即远程端,master表示主分支名
git push
根据当前分支推送到远程对应的分支
git push --set-upstream 设置远程分支映射
git push --set-upstream origin brabch_name
–set-upstream设置远程服务器端的分支仓库与本地分支仓库的映射
git push -d 删除远程仓库分支
git push -d origin branch_name
删除远程仓库的branch_name分支
git pull 拉取分支并合并
git pull
将远程仓库的当前分支和本地仓库的当前分支合并
也可使用
git pull origin branch_name
表示将远程仓库的branch_name分支与当前分支合并
git checkout -t origin 拉取远程分支到本地
git checkout -t origin/branch_name
将远程的branch_name
分支拉取到本地
git stash
git stash 是git中的一个栈空间,可以存放工作区和暂存区尚未提交的修改,常用保存部分可能有参考价值但又需要重写的代码
git stash
将工作区和暂存区中尚未提交的修改存入栈中
git stash apply
git stash apply
将栈顶存储的修改恢复到当前分支,但不删除栈顶元素
git stash drop
git stash drop
删除栈顶存储的修改
git stash pop
git stash pop
将栈顶存储的修改恢复到当前分支,同时删除栈顶元素
git stash list
git stash list
查看栈中所有元素