Git常用命令速览复习
本文最后更新于:2021年11月8日 中午
Git 常用命令速览复习。
参考教程:廖雪峰 Git 教程
git init # 创建仓库
git add filename1, [filename2] # 将文件添加至 git 管理
git commit -m "msg" # 提交文件修改,一次提交仓库内的多个文件
git status # 掌握仓库当前的状态
git diff filename # 查看未提交文件的修改
git log # 查看提交日志
git reset --hard HEAD^ # 版本更改,在 Git 中,用 HEAD 表示当前版本,上一个版本就是 HEAD^ ,上上一个版本就是 HEAD^^ ,当然往上100个版本写100个 ^ 比较容易数不过来,所以写成 HEAD~100,或者直接通过 commit id 来更改
git reflog # 查看历史命令日志工作区有一个隐藏目录.git,这个不算工作区,而是 Git 的版本库。
Git 的版本库里存了很多东西,其中最重要的就是称为 stage(或者叫 index )的暂存区,还有 Git 自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
前面把文件往 Git 版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因此,务必要将修改或添加的文件添加至暂存区才能进行提交。
git restore filename # 将文件在工作区的修改全部撤销,要么撤销到暂存区的状态,要么撤销到版本库的状态这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
如果你的文件已经通过git add提交到暂存区:
git restore --staged filename # 将暂存区中的文件撤销,重新放回工作区(如果工作区文件又进行了修改,则不会覆盖)删除文件:
git rm filename # 删除已经提交的文件(需要重新提交)另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
git checkout -- test.txtgit checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
远程仓库设置:
# 创建用户名和邮箱
git config --global user.name "yourname"
git config --global user.email "your_email@youremail.com"
# 生成秘钥
ssh-keygen -t rsa -C "your_email@youremail.com"
# 添加远程仓库
# 远程库的名字就是 origin,这是 Git 默认的叫法,也可以改成别的
git remote add origin https://github.com/RoOtZwY/git-learning.git
# 把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
# 由于远程库为空,第一次推送 master 分支时,加上-u参数,会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的master分支和远程的master分支关联,在以后的推送或者拉取时就可以简化命令。
git push -u origin master
# 提交到 master 后 push 到远程仓库
git push origin master
# 查看远程库信息
git remote -v
# 根据名字删除,比如删除origin
git remote rm origin远程仓库克隆:
# 将远程仓库克隆到当前文件夹
git clone git@github.com:用户名/仓库名GitHub给出的地址不止一个,还可以用https://github.com/用户名/仓库名这样的地址。实际上,Git支持多种协议,默认的git://使用SSH,但也可以使用HTTPS等其他协议。
使用HTTPS除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用SSH协议而只能用HTTPS。
分支管理:
Git鼓励大量使用分支。
在版本回退里,每次提交,Git 都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在 Git 里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
当创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。
不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变。
假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并。
合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支。
# 创建并切换到dev分支
git checkout -b dev
# git checkout 命令加上 -b 参数表示创建并切换,相当于:
# 创建
git branch dev
# 切换
git checkout dev
# 新版本的Git提供了新的git switch命令来切换分支
git switch dev
# 列出所有分支
git branch
# 合并指定分支到当前分支
git merge 指定分支
# 删除分支
git branch -d dev
# 查看分支情况
git log --graph --pretty=oneline --abbrev-commit保存当前工作环境:
如果你想在新的分支上操作,但目前的分支工作为完成,可以使用:
# 保存当前分支状态
git stash
# 查看保存状态
git stash list
# 恢复不删除
git stash apply
# 恢复删除
git stash pop
# 直接删除
git stash drop
# 为了方便操作,Git 专门提供了一个 cherry-pick 命令,让我们能复制一个特定的提交到当前分支
git cherry-pick <分支id>