- 设置用户名
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
撤销所有未提交的操作,包括add
git 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分支的最新修改推送至GitHub
git clone git@github.com:michaelliao/gitskills.git
从远程仓库克隆,Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin
git 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、commit
git merge --no-ff -m "合并信息" <branch>
禁止快速合并
git branch -d <branch>
删除分支
git branch -D <branch>
强行删除分支(未合并的分支) - BUG分支
git stash
把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash list
查看stash
git stash apply
恢复现场
git stash drop
删除保存的stash
git stash pop
恢复并删除stash
git 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>
删除远程标签(删除远程标签之前要先删除本地标签)
git archive -o /d/www/update.zip HEAD $(git diff HEAD HEAD^ --name-only)
导出和上个版本差异的文件
git archive -o /d/update/project.zip master -0
导出纯净项目源码
git config core.quotepath false
如果导出的文件有中文显示成Unicode导致导出失败,配置这个
git config core.gitproxy=socks5://127.0.0.1:1080
设置socket5代理
git config core.filemode false
忽略文件权限差异