git 经常使用命令

注:本文不适合新手,只是方便查阅。新手能够参考廖雪峰的教程:[www.liaoxuefeng.com/wiki/896043…]html

git log参数太多了,又很好用,这里放上参数大全:[www.cnblogs.com/bellkosmos/…]git

方便起见,本文举例文件名为text.txt。若实际中文件名中有空格,请用引号包围。github

首先了解下git维护的三块内容:工做区-->缓存区stage-->当前版本HEAD。缓存

本地向经常使用命令(一个大体的分类):

  • 修改全局名称:git config --global user.name "cm"
  • 修改全局邮箱:git config --global user.email "@example.com"
  • 建立本地仓库:git init
  • 提交单个修改至缓存区(新增也算修改):git add text.txt,强制添加(ignore的也行):git add -f text.txt
  • 提交全部修改至缓存区:git add .
  • 从缓存区提交到HEAD:git commit -m "一些些说明",每次提交都有commit.id
  • 删除文件:提交删除文件至缓存区git rm text.txt-->提交到HEADgit commit -m "一些些说明"
  • 查看缓存区状态:git status
  • 查看提交日志:git log(版本回退以后,这里的提交日志也会减小哦),精简版内容:git log --pretty=online,带分支合并图内容--graph
  • 显示最后一次提交:git log -1
  • 把提交历史整理成一条线:git rebase
  • 查看全部历史命令:git reflog(要是遇到什么奇奇怪怪的东西,按Q就退出了)
  • 撤销工做区的修改或删除:git checkout -- text.txt(本质是从HEAD拷贝了一份新的text.txt替换。不影响缓存区内容),撤销所有git checkout -- *
  • 从缓存区放回工做区(回到git add text.txt命令前):git reset HEAD text.txt
  • 版本回退或前进(commit了没办法呀),同时更新工做区:
    • git reset --hard HEAD^HEAD^表示上个版本,HEAD^^表示上上个版本,以此类推。也可能够简写:HEAD~100表示100个^
    • git reset --hard <commit.id> 根据commit.id选择想到达的版本
    • 一些些提示:回退前能够git log查看版本。回退完后悔了想前进,能够用git reflog查看commit.id再前进;操做完,由于工做区和HEAD同步了嘛,因此缓存区很“干净
  • 查看当前工做区和HEAD中的区别:git diff HEAD -- text.txt

分支相关命令:

  • 建立分支名为dev:git branch dev
  • 切换分支到dev:git switch dev或者git checkout dev
  • 建立+切换当前分支为dev:git switch -c dev或者git checkout -b dev
  • 以远程分支dev为副本建立+切换分支:git checkout -b dev origin/dev
  • 查看分支:git branch(列出了全部分支,标记*为当前分支),添加-vv参数能看到关联的远程分支
  • 把dev分支的内容合并到当前分支:git merge dev
  • 禁用fast forward合并:git merge --no-off dev,由于要进行一次commit,因此通常加上-m参数。
  • 解决冲突相关:能够git status中看到冲突了。手动修改后提交至HEAD。提交后能够用git log --graph看到分支合并图。结合上条例子,dev不变。
  • 删除dev分支:git branch -d dev,强行删除没被合并的分支,把小d换成大D
  • 保存工做现场(多用于切换分支前):git stash
  • 查看保存的工做现场:git stash list
  • 恢复工做现场:
    • git stash apply:恢复工做现场,但不删除stash内容不删除,须要经过git stash drop删除stash。能够查看git stash list后逐条恢复,如git stash apply stash@{0}
    • git stash pop:恢复并删除stash
  • 复制特定的提交到当前分支再提交一遍:git cherry-pick <commit.id>

远程仓库相关命令:

  • 本地仓库关联远程仓库:git remote add <远程仓库名> <远程仓库地址>(通常远程仓库名取为origin)
  • 推送到远程仓库origin对应的分支:git push origin master, master是本地分支名,push时git会把远程同名分支关联起来,因此远程分支名也是master。 第一次带上-u参数,之后操做就方便了,只须要在当前分支下git push就好了,可用git branch -vv查看默认推送状况。(可能会出现SSH警告,输入yes就行了)
  • 从远程仓库克隆仓库到本地:git clone <远程仓库地址>(不须要本地额外建仓库,直接推就好了)
  • 查看远程仓库信息:git remote,带上-v参数显示更详细的信息
  • 获取远程分支的提交:git pull origin master,至关于git fetch origin/master+git merge origin/mastergit pull是拉取全部分支。 (若是出现no track information提示,能够先用git branch --set-upstream-to <branch-name> origin/<branch-name>建议本地与远程分支的连接)。
  • 删除远程仓库关联:git remote rm origin

标签相关命令(标签老是和commit挂钩):

  • 新建默认标签:git tag <标签名>,默认标签是打在最新一次的提交上的
  • 新建指定提交的标签:git tag <标签名> <commit.id>
  • 查看全部标签:git tag,标签是按字母排序的
  • 查看单个标签具体信息:git show <标签名>
  • 新建带说明的标签:git tag -a <标签名> -m "一些些说明" <commit.id>
  • 删除本地标签:git tag -d <标签名>
  • 推送标签到远程:git push origin <标签名>
  • 推送全部标签到远程:git push origin --tags
  • 删除已经推送到远程的标签:先删本地git tag -d <标签名>-->再删远程git push origin :refs/tags/<标签名>

自定义git相关命令:

忽略特殊文件

  • 配置.gitignore模板:[github.com/github/giti…]
  • 查看被忽略文件在.gitignore文件哪一项:git check-ignore -v <文件名>

配置别名(偷懒必备)

  • 配置别名:git config --global alias.<别名> <现名>
  • 很少说了,上来先配置一个:git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

最后写给本身的注意事项:

HEAD改变后会直接致使其它两块内容的改变。 工做区改变后须要一步步保存到HEAD。app

master是主分支;HEAD指向的是当前分支。注意这二者的关系。全部的操做默认在当前分支下进行。fetch

push时本地和远程分支默认须要同名,git也会自动追踪远程同名分支。特意改为不一样名会很麻烦,不建议。日志

相关文章
相关标签/搜索