注:本文不适合新手,只是方便查阅。新手可以参考廖雪峰的教程:[www.liaoxuefeng.com/wiki/896043…]
git log
参数太多了,又很好用,这里放上参数大全:[www.cnblogs.com/bellkosmos/…]
方便起见,本文举例文件名为text.txt。若实际中文件名中有空格,请用引号包围。
首先了解下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/master
;git 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。
master是主分支;HEAD指向的是当前分支。注意这两者的关系。所有的操作默认在当前分支下进行。
push时本地和远程分支默认需要同名,git也会自动追踪远程同名分支。特地改成不同名会很麻烦,不建议。