git常用命令
这是一篇更新于 99 天前的文章,其中的信息可能已经有所发展或是发生改变。
Git Commands
开始使用git
- 设置用户名
git config --global user.name "Your Name"
- 设置邮箱
git config --global user.email "email@example.com"
- 创建仓库(当前目录)
git init
- 添加文件
git add <file>
添加指定文件git add .
添加所有改变的文件
注:如果add后又修改了文件,还要再add一次之后再commit - 提交
git commit -m "提交说明"
- 查看状态
git status
- 查看修改
git diff <file>
查看单个文件的更改git diff
查看所有文件的更改 - 查看历史提交
git log
git log --pretty=oneline
一次提交显示为一行git blame <file>
查看一个文件的修改记录(谁在什么事件修改了什么) - 查看历史命令
git reflog
版本控制
- 版本回退
git reset --hard HEAD
撤销所有未提交的操作,包括addgit reset --hard HEAD^
回退到上一个版本git reset --hard HEAD^^
回退到上两个版本git reset --hard HEAD~100
回退到上100个版本git reset --hard <commit>
回退到指定版本git checkout -- <file>
丢弃工作区的修改,如果文件add到了暂存区又做了修改,则恢复到暂存区,否则恢复到版本库的状态,如果文件删除了,则回复到版本库的文件git reset HEAD <file>
把暂存区的修改撤销掉,重新放回工作区
注:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- <file>
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景1,第二步按场景1操作
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退,不过前提是没有推送到远程库 - 删除/重命名
git rm <file>
删除文件,尽管文件已经添加到暂存区(add)git rm --cached <file>
把文件从版本库、暂存区删掉,但是保留硬盘文件git mv <file> <other file>
重命名文件
远程仓库
- 创建ssh密钥
ssh-keygen -t rsa -C "youremail@example.com"
注:一路回车,在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人,复制内容,在github上添加 - 远程仓库
git remote add origin git@github.com:michaelliao/learngit.git
关联远程仓库,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库git push -u origin master
我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令git push origin master
把本地master分支的最新修改推送至GitHubgit clone git@github.com:michaelliao/gitskills.git
从远程仓库克隆,Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origingit remote
查看远程库的信息git remote -v
查看远程库的详细信息git push origin master
推送远程分支,就是把该分支上的所有本地提交推送到远程库git pull
从远程库拉取git checkout -b <branch> origin/<branch>
创建远程origin的branch分支到本地git branch --set-upstream <branch> origin/<branch>
指定本地dev分支与远程origin/dev分支的链接git push origin --delete <branch>
删除远程分支
分支管理
- 创建分支
git checkout -b <branch>
创建分支并切换过去,相当于执行了git branch <branch>
和git checkout <branch>
git branch
查看当前分支git checkout <branch>
切换分支git merge <branch>
合并分支到当前分支,有冲突修改后再add、commitgit merge --no-ff -m "合并信息" <branch>
禁止快速合并git branch -d <branch>
删除分支git branch -D <branch>
强行删除分支(未合并的分支) - BUG分支
git stash
把当前工作现场“储藏”起来,等以后恢复现场后继续工作git stash list
查看stashgit stash apply
恢复现场git stash drop
删除保存的stashgit stash pop
恢复并删除stashgit stash apply stash@{0}
多次stash,恢复指定的stash
标签管理
- 创建标签
git tag <name>
创建标签git tag
查看所有标签git tag <name> <commit>
在指定的版本版本id打标签git show <name>
查看标签信息git tag -a <name> -m "说明" <commit>
创建带有说明的标签 - 操作标签
git tag -d <name>
删除标签git push origin <name>
推送某个标签到远程仓库git push origin --tags
一次性推送全部尚未推送到远程的本地标签git push origin :refs/tags/<name>
删除远程标签(删除远程标签之前要先删除本地标签)