用途 | git命令 | 说明 |
---|---|---|
创建本地仓库 | git init | 当前目录下生成.git文件,用来跟踪管理版本库 |
配置用户名 | git config --global user.name "Your Name" | --global参数表示这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。 |
配置邮箱 | git config --global user.email "email@example.com" | --global参数表示这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。 |
添加文件 | git add file | 将工作区文件添加到暂存区 |
删除文件 | git rm file | 先手动删除文件,然后使用 git rm file 和 git add file 效果是一样的。 |
提交修改 | git commit -m "message" | 将暂存区文件提交到当前分支。 -m后面输入的是本次提交的版本说明。 |
查看仓库状态 | git status | |
查看文件修改内容 | git diff file | 将工作区文件与版本库文件进行对比: 若寄存区有对应文件,则对比工作区、寄存区文件; 否则对比工作区、当前分支文件。 |
查看历史版本 | git log | 显示版本号、提交人、提交时间、版本说明 |
git log --abbrev-commit | 版本号缩写 | |
git log --pretty=oneline | 单行显示,只显示版本号和版本说明 | |
切换版本 | git reset --hard HEAD^ git reset --hard HEAD"^" git reset --hard HEAD~1(数字代表回退的版本数) git reset --hard commit id | HEAD表示当前版本。 ^ 符号在Windows的命令行中是特殊字符,所以会报错。 |
查看所有分支的所有操作记录 | git reflog | 可查看包括commit和reset的操作,包括已经被删除的commit记录,git log则不能查看已经删除的commit记录 |
撤销工作区文件修改 | git restore file | 如果暂存区有对应文件,则修改撤回后与暂存区文件一致。 否则与当前版本文件一致。 |
删除寄存区文件 | git restore --staged file | 此次删除寄存区文件操作,并不会影响工作区文件(即使add后工作区文件再次了进行修改)。 |
生成ssh密钥 | ssh-keygen -t rsa -C "youremail@example.com" | 执行成功后,在用户主目录会生成.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥。 |
关联本地仓库与远程仓库 | git remote add origin git@server-name:path/repo-name.git | git@server-name:path/repo-name.git 是 GitHub 中的 SSH |
删除已关联的名为origin的远程库 | git remote rm origin | |
将本地仓库的一个分支推送到远程仓库上 | git push -u origin master git push origin master | 把master分支所有本地提交推送到远程库对应的远程分支上。 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。 之后,只要本地作了提交,就可以通过命令:git push origin master把本地master分支的最新修改推送至GitHub。(也可以推送其他分支,修改分支名即可) |
从远程库克隆一个本地库 | git clone git@server-name:path/repo-name.git | |
从远程库抓取分支并合并到本地分支 | git pull orgin master:master | 如果远程分支(master)要与当前分支合并,则冒号后面的部分可以省略。 如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。 如果当前分支只有一个追踪分支,连远程主机名都可以省略。 |
git pull origin master --allow-unrelated-histories | --allow-unrelated-histories : 该选项可以合并两个独立启动仓库的历史。 解决fatal : refusing to merge unrelated histories 取回origin远程库的master分支,与本地仓库的当前分支合并。 | |
创建分支 | git branch name | name为分支名 |
切换分支 | git checkout name git switch name | name为分支名 |
创建并切换分支 | git checkout -b name git switch -c name | name为分支名。 git checkout命令加上-b参数表示创建并切换,相当于上面两条命令。 git switch命令加上-c参数表示创建并切换,相当于上面两条命令。 |
查看分支 | git branch | git branch 命令会列出所有分支,当前分支前面会标一个*号。 |
合并指定分支到当前分支 | git merge name | name为分支名 |
git merge --no-ff -m "merge with no-ff" dev | --no-ff 表示禁用fast forward,会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。 | |
删除分支 | git branch -d name | name为分支名 |
git branch -D name | name为分支名。 如果要丢弃一个没有被合并过的分支,需要通过git branch -D name强行删除。 | |
查看分支合并图 | git log --graph | |
把本地未push的分叉提交历史整理成直线 | git rebase | 目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。 |
本地关联远程分支 | git branch --set-upstream-to=origin/remote_branch your_branch | origin/remote_branch是本地分支对应的远程分支;your_branch是当前的本地分支。 |
储藏当前工作区 | git stash | 把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。 stash是本地的,不会通过git push命令上传到git server上。 |
git stash save "xxxx" | xxxx为stash版本说明,推荐使用 | |
查看储藏列表 | git stash list | |
恢复stash到工作区 | git stash apply | 使用apply命令恢复后,stash内容并不删除,需要用git stash drop来删除。 在使用git stash apply命令时可以通过名字指定使用哪个stash,默认使用最近的stash(即stash@{0})。 |
git stash pop | 这个指令将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下。 | |
删除stash | git stash drop stash@{0} | 删除对应版本的stash |
删除所有stash | git stash clear | |
复制一个特定的提交到当前分支 | git cherry-pick commit | commit为特定提交的commit id |
查看远程库的名称 | git remote | |
查看远程库的详细信息 | git remote -v | 显示可以抓取和推送的origin的地址。 如果没有推送权限,就看不到push的地址。 |
创建标签 | git tag tagname | 给当前分支打标签。tagname为标签名。 默认是打在最新提交的commit(HEAD)上的。如果要给历史版本打标签,加上历史版本的commit id就可以了。 |
创建带有说明的标签 | git tag -a v0.1 -m "version 0.1 released" commit_id | -a指定标签名,-m指定说明文字。 |
删除标签 | git tag -d v0.1 | 因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。 |
git push origin :refs/tags/v0.1 | 如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除,然后,从远程删除。 | |
推送标签到远程 | git push origin tagname | 推送某个标签到远程 |
git push origin --tags | 一次性推送全部尚未推送到远程的本地标签 | |
查看所有标签 | git tag | 标签不是按时间顺序列出,而是按字母排序的。 |
查看标签信息 | git show tagname | 标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。 |
解决warning | git config --global core.autocrlf false | warning: LF will be replaced by CRLF in 原因是存在符号转义问题。 windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行 add 时出现提示,解决办法: git config --global core.autocrlf false |