0, 初始化版本库
$ git init //将目录变为git可以管理的仓库
//配置提交者信息
$ git config --global user.email "[email protected]"
$ git config --global user.name "your name"
1, git clone
本地仓库为零时,可以直接克隆远程库,此时库与库的连接自动建立
$ git clone *****.git //克隆远程库代码 支持https git协议
$ git branch //查看当前的分支 一般默认为master
$ git clone -b remote_branch ****.git
//将远程库克隆,取其中remote_branch分支到本地工作区
$ git branch -a //查看本地分支与远程分支
$ git remote -v //列出与本地仓库关联的所有远程库
2, 本地库与远程库关联
先有本地库代码,后有远程库,想将本地代码推送至远程库,需进行库关联,还有分支关联
$ git remote add origin 远程库地址.git
//关联远程仓库,并将远程库取名为origin, 此名是自定义的
$ git push -u origin [本地分支名:]远程分支名
//本地分支名省略时,默认代表当前分支
//-u代表建立分支间联接 下次push可直接省略本地分支名 origin为远程库名
$ git push 远程库名 远程分支名
//联接建立好后,第二次push可相对简化
$ git remote -v //查看与当前库相关联的远程库
3, 本地仓库与远程库同步
$ git pull //非fork项目的同步
//fork项目的同步
$ git remote add usp 远程项目地址 //usp为自定义远程库别名
$ git fetch usp && git merge usp/master
//此处以远程的master分支举例
4, git checkout 检出与切换分支
对应的工作区 暂存区都会相应匹配
$ git branch -r //查看所有远程分支
$ git checkout -b 本地分支名 origin/远程分支名
//在新建本地分支并切换到该分支 将远程分支代码拉到此分支
$ git checkout 本地已存在的分支 //切换到此分支
$ git checkout 标签名或远端分支名
//在本地建立匿名分支,切换到此分支,拉取代码到此分支
5, 修改代码与提交
$ git add files //文件提交到暂存区
$ git status //查看当前文件的状态
$ git commit -m "注释" //文件提交到本地仓库
$ git rm --cached files
//将上次add到暂存区的files 改动丢弃 不影响工作区
6, git pull && git push冲突处理
pull本地代码库为最新版本时常会出现冲突错误,一般是由于更新下来的内容与本地修改的内容有冲突
$ git stash //先将工作区与暂存区内的修改存入栈
$ git stash list //查看栈中所有变量
$ git pull //重新拉取最新代码
$ git stash pop //从栈中恢复工作区 暂存区内容
//此时系统自动合并冲突,若解决不了,则需要手动解决再提交
push时发生冲突需要先pull
$ git pull //未发生冲突
$ git push //继续push
$ git pull //发生冲突
$ git status //查看冲突文件
// 手动merge 修改冲突文件
$ git add 冲突文件
$ git commit files
//提交所有改动文件, 包括已merge的冲突文件与pull下来已发生修改的文件
$ git push //重新push
$ git pull //更新本地代码到最新版本
7, 撤销命令checkout && revert && reset
7.1 commit层面
git reset用于未被提交到remote的改动,即撤销local的修改。除了移动 HEAD, 还可以用于更改工作区与暂存区
- –soft:修改HEAD,不修改暂存区与工作区
- –hard:修改HEAD,暂存区与工作区
- –mixed:修改HEAD 暂存区,不修改工作区 默认行为
$ git reset <last good SHA>
git revert 用于你已经push到远端后,想要撤销某个commit, 它会生成一个新的commit 内容与指定SHA相反
$ git revert <SHA>
git checkout 用于将HEAD指针 在各个 分支 间移动,也就是分支切换
$ git checkout branch_name
7.2 file 层面
git checkout 用于将暂存区或版本区的内容拷贝至工作区, 用于撤销工作区的修改,需小心使用
$ git checkout file //将暂存区内容覆盖工作区
$ git checkout HEAD file //用版本区内容覆盖工作区与暂存区
git revert没有file层面的操作
git reset 用来撤销暂存区内容
$ git reset HEAD file //将版本区HEAD指向内容覆盖暂存区
$ git reset <commit> file //将版本区中的commit来覆盖暂存区
8, git diff 文件比较
$ git diff file // 工作区与暂存区比较
$ git diff HEAD file //工作区与HEAD版本区比较
$ git diff --staged 或 --cached file
//比较暂存区与版本区HEAD
$ git diff commitid file //工作区与某次commit id比较
$ git diff --cached commitid file //暂存区与某次commit id比较