安装就不谈了
配置看: https://blog.csdn.net/zhangsify/article/details/80488809
0.全局配置
git config --list
查看全局所有的配置列表
git config --global user.name 'your_name'
配置全局用户名
git config --global user.email 'your_email'
配置全局邮箱
这里就是记录是哪个账号在代码仓库commit
也可针对某一个git项目设置不同的局部用户名和邮箱,这种情况在公司比较常见。只需要吧--global
删除即可
1.初始化本地代码仓库
git init
直接在本地创建空的
git clone <git's url>
直接扒线上代码仓库的
2.管理本地仓库
git status
查看当前本地仓库的状态
被修改增加删除的文件在工作区,暂存区或在代码仓库未提交都会有不同的状态
git add <filename>
将修改或添加的文件加到暂存区
git add -A
将修改或添加的文件全部加到暂存区
git rm <filename>
将暂存区和工作区的现有文件删除
git commit -m 'commit_info'
提交到本地仓库,并写好提交备注
git log --graph --pretty=oneline --abbrev-commit
这个命令是用来图形化查看commit情况
3.管理本地仓库不同版本
git log
查看本地仓库的提交日志,包含commit id,操作日期,用户和什么操作(merge
)导致了这次更新
git通过commit id唯一标识不同版本的本地仓库
git reset --hard <想回到的版本的commit_id的前几位或全程>
工作区,暂存区,本地仓库全部回到那个之前版本提交的状体
HEAD是一个指向当前分支的当前版本的指针
git reset --hard HEAD^^或HEAD~2
表示回到两个版本前的版本
其中又分 hard / soft / …之类,有兴趣可以继续查阅
git reflog
查看命令历史,可以查看回退后,看不到commit id的被回退的版本
4.关于本地的修改
git diff HEAD -- <file_name>
查看工作区和代码仓库中相同文件名不同的地方
git diff -- <file_name>
查看工作区和暂存区中相同文件名不同的地方
git diff --cached <file_name>
查看暂存区和本地仓库中相同文件名不同的地方
git checkout -- <file_name>
只删除了工作区的文件,从暂存区拉回来
git reset HEAD <file_name>
+ git checkout -- <file_name>
工作区和暂存区都被删除,先从代码仓库拉到暂存区,再从暂存区拉回工作区
5.分支管理
分支是多人开发的基础
git branch
展示分支信息(其中又-r
-a
等参数可选)
git branch <branch_name>
创建分支
git checkout <branch_name>
切换分支
git checkout -b <branch_name>
创建+切换分支
git branch -d <branch_name>
删除分支
git merge <branch_name>
把branch_name分支合并到当前分支
git branch -vv
查看远程和本地分支关联情况
其中最重要的应该是从原理上了解HEAD和分支之间的关系,和分支操作与移动指针的关系
6.远程库基操
6.1创建远程库
1.如果
git init
,你应该现在你自己的GitHub上创建一个同名的repo
git remote add origin git@github.com:your_github_username/your_repo_name.git
将本地仓库与远程关联,其中origin
就代表后面那一串链接
//这里用的是git协议,通过ssh链接,之前我们应该在GitHub上添加ssh-key,这个按照GitHub官网教程即可,使用http协议又有所不同git push -u origin master
第一次往什么都没有的远程库中push,加上-u
有关git push
的,下面讲,并给一个详细连接
2.如果
git clone ....
,当我没说,接着往下``
6.3远程分支和本地分支关联
如果远程分支不存在,那么要先创建远程分支:git push origin <branch_name>
即可;即对不需要写远程分支是啥的push,实现的是创建远程新分支。
git branch --set-upstream-to origin/<branch_name> <branch_name>
把本地branch_name和远程的origin/branch_name分支关联起来
git checkout -b <branch_name> origin/<branch_name>
在本地新建一个branch_name分支,并和origin/branch_name关联起来
6.2 push&pull代码库
git push
推送远程库某个分支的更新;
原型为git push <远程主机名> <本地分支名>:<远程分支名>
意义自明
各种省略参数的用法(万变不离其中):http://www.cnblogs.com/qianqiannian/p/6008140.html
git pull
取回远程库某个分支的更新,再与本地的指定分支合并,等于git fetch
+git merge
;
原型为git pull <远程主机名> <远程分支名>:<本地分支名>
意义自明
那和
git clone
有什么区别呢??
git clone
一个从无到有的过程,把所有分支即整个项目扒下来到本地库
git pull
获取到一个分支的更新到本地,并更新本地库
git pull
同样有省略参数的用法,网上自查
先pull再push的必要性:你push的代码版本号低于远程库时,就会提示你先pull再push。当多人开发时,他人在你之前提交了代码到远程库,本地的版本号就低于远程,强行push只会覆盖,所以先pull下来,再push上去。
既然之前提到本地修改,那如果push到远程库出错了,怎么修改呢?
7. stash操作保存未完成的现场
git stash
之前调用git status,还有很多状态的文件,但是git stash
之后的再git status就是clean
git stash list
查看被stash的现场的list
git stash pop
恢复最新被stash的现场,并删除list中该现场的记录,等价于git stash apply
+ git stash drop
8.得到更优雅的分支曲线,方便查看commit变化
git rebase
效果什么的,直接上图吧
- 在第一个关联好的代码仓库进行rebase test的commit两次,后push
- 再另一个关联好的代码仓库进行rebase test的commit,后pull远程库
git rebase
后
由之前的分支变成优雅的直线,仔细观察commit id,原来就在本地的commit id变了,说明git帮你整理顺序时,远程库中的照搬,本地的帮你重新做了一遍一模一样的commit;并且merge后的commit不见了
9.设置tag更好地管理不同commit的代码库
git tag v1.0
表示给最新的commit_id打上v1.0的标签
git tag
显示所有标签
git tag <tag_name> <commit_id>
给<commit_id>打上<tag_name>标签
git show <tag_name>
展示对应标签信息
git tag -a <tag_name> -m "commit context" <commit_id>
给对应<commit_id>打上<tag_name>标签并写上说明"commit context"
git tag -d <tag_name>
删除标签
git push origin <tag_name>
推送一个本地标签到远程库(根据commit_id标识tag_name打在那)
git push origin --tags
推送全部未推送过的本地标签到远程库
git push origin :refs/tags/<tag_name>
删除远程库中名为tag_name的标签
git reset --hard <tag_name>
回退到标签版本处
tag即是commit_id只是不一样的表现形式。
Finally:所有的git基本指令(git push
git status
git stash
git tag
…),都有--help
参数,打开官方文档,希望大家多多阅读文档,加强能力
本博客借鉴了廖雪峰老师的教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
.#