摘录自
https://www.jianshu.com/nb/34866270
===============================
工作区Working Directory-->暂存区Stage-->版本库Repository-->远程仓库Remote
Git命令:
#初始化本地仓库
git init
#添加文件到本地仓库
#第一步,add到缓冲区:
git add test.txt
git add test1.txt test2.txt
#第二步,commit到本地仓库:
git commit -m "add test.txt"
查看状态:
git status
查看差异:
git diff
#查看提交历史:
git log
#每一行显示一条提交日志:
git log --pretty=oneline
#图形化展示提交历史:
git log --graph
#删除缓存文件:
git rm --cached <file>
回到上一个提交:
git reset --hard HEAD^
回到上上个提交:
git reset --hard HEAD^^
回到前100个提交的
git reset --hard HEAD~100
使用Commit id来回到提交点:
git reset --hard 36f234a60d858871f040cb0d7ca3e78251df82f7
查看操作历史:
git reflog
撤销操作:
a.修改在工作区但并没有提交到缓冲区:
git checkout -- file
b.修改在缓冲区但并没有commit到本地仓库:
git reset HEAD <file>
然后再:
git checkout -- file
c.修改提交到了本地仓库:
git reset --hard HEAD^
创建已有本地仓库和远程仓库的关联
# 添加远程仓库关联
git remote add origin git@github.com:username/repos.git
# 首次推送 master 分支的全部内容
git push -u origin master
# 后续推送 master 分支的最新更改
git push origin master
从已有远程仓库克隆到本地仓库
# 克隆远程仓库到本地仓库
git clone git@github.com:username/repos.git
# 推送 master 分支的最新更改
git push origin master
=============================
#查看远程仓库名称
git remote
#查看远程仓库详情 : 拉取和推送链接
git remote -v
master 分支用于生产环境部署,dev 分支用于收集开发成果,feature 分支用于开发具体功能分支
#推送本地 master 分支到远程仓库的 master 分支
git push origin master
#推送本地 dev 分支到元层仓库的 dev 分支
git push origin dev
拉取远程仓库上的代码:
a.#下载远程仓库的master分支,这一步只会
#将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态
#并不会改变你本地仓库的状态,所以也就不会更新你的 master分支,自然也不会修改你磁盘上的文件.
git fetch origin master
b.#在通过下面的方法之一来合并本地远程分支到本地仓库
git merge origin/master
git rebase origin/master
git cherry-pick origin/master
a,b两步也可以直接通过pull来进行操作,相当于git fetch和git merge:
#拉取最新版本
git pull
团队协同开发时,不仅平时要定期拉取(git pull),推送到远程仓库前更应
先拉取(git pull)再推送(git push),如出现冲突,解决冲突后再推送.
=======================================
分支
创建分支:
#创建分支dev
git branch dev
#列出分支
git branch
#切换到分支dev
git checkout dev
#创建并切换到dev分支
git checkout -b dev
#删除dev分支
git branch -d dev
#回到mster后再master上合并dev分支
#快速前进模式
git merge dev
#禁用快速前进模式,采用递归模式
git merge --no-ff dev
git 用 <<<<<<< 标记一个分支冲突开始,======= 标记分支分割线,>>>>>>> 标记另一个分支结束.
草稿:
保存当前工作区的内容到草稿箱:
#工作区更改添加到"草稿箱", 支持多次添加到"草稿箱"
git stash
#列出"草稿箱"内容
git stash list
#恢复"草稿箱"内容
git stash apply
#删除"草稿箱"内容
git stash drop
#恢复并删除"草稿箱"内容
git stash pop
#恢复|删除指定"草稿箱"内容
git stash <stash-id>
例如 git stash apply stash@{0}
变基合并rebase;
# 切换到 `snow` 分支
$ git checkout snow
#改变基础版本(父版本)为master,简称"变基"
git rebase master
#切换到master分支下
git checkout master
#改变父版本为 `snow` 分支指向的版本
git rebase snow
总结下来就是两步:
将目标分支上的工作成果转移到到主干分支 : git rebase master
主干分支接收已转移好的目标分支工作成果 : git rebase <branch>
=============================================
里程碑式标签
#创建标签
#方式一: 默认 `HEAD` 指向的版本
git tag v0.0.1
#方式二: 指定 `commit_id` 表示的版本
git tag v0.0.2 f971647
#方式三: 指定 `commit_id` 表示的版本,同时创建标签说明信息
git tag -a v0.0.3 -m "v0.0.3" f971647
#列出标签
git tag
#显示标签
git show v0.0.1
#删除标签
git tag -d v0.0.1
#推送标签
git push origin v0.0.1
#推送全部标签
git push origin --tags
#删除远程标签
#a. 删除本地标签
git tag -d v0.0.1
#b. 推送删除标签(删除也是推送)
git push origin :refs/tags/v0.0.1
==================================
git配置
# 配置当前项目(`local`)的用户名(`snowdreams1006`)
git config --local user.name "snowdreams1006"
# 配置当前项目(`local`)的邮箱(`snowdreams1006@163.com`)
git config --local user.email "snowdreams1006@163.com"
# 查看默认全部配置: `local>global>system`
git config --list
# 查看当前项目配置,等同于 `.git/config` 文件
git config --local --list
# 查看当前用户配置,等同于 `~/.gitconfig` 文件 或 `~/.config/git/config` 文件
git config --global --list
# 查看当前系统配置,等同于 `/etc/gitconfig` 文件
git config --system --list
通过alias取别名
# `git checkout` 缩写成 `git co`
git config --global alias.co checkout
# `git commit` 缩写成 `git ci`
git config --global alias.ci commit
# `git branch` 缩写成 `git br`
git config --global alias.br branch
core.editor 编辑器
# `Mac` 系统如下设置: 设置成自己的 `Sublime` 的安装路径
git config --local core.editor "'/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl' -n -w"
# `Windows` 系统如下设置: 设置成自己的 `Sublime` 的安装路径
git config --local core.editor "'F:\Sublime Text 3 sublime text.exe' -n -w"
core.template 提交模板
#查看当前提交模板配置:
git config commit.template
#编辑好提交模板之后进行模板的配置
git config --local commit.template commiit-template.txt