git 的工作区、暂缓区和远程仓库的关系
- Workspace:工作区(我们开发环境看的到的目录)
- Index/Stage:暂存区(
git add之后文件存放的地方) - Repository: 本地仓库(
git commit之后文件存放的地方) - Remote: 远程仓库(
git push之后文件存放的地方)
注意:以下命令都是在 Git Bash 上运行的
创建git仓库
- 在当前目录下创建git仓库:
git init - 新建一个目录,并初始化为git仓库:
git init [新建的目录名] - 拉取远程git仓库到本地:
git clone [远程仓库地址]
添加工作区代码到暂存区
- 将所有文件添加到暂存区:
git add . - 将指定文件添加到暂存区:
git add [文件名称]
提交暂存区代码到本地仓库
- 提交暂存区代码到本地仓库并添加备注:
git commit -m '备注字符串'
推送本地仓库代码到远程分支
- 第一次推送
- 添加一个新的远程仓库并命名:
git remote add [远程仓库在本地的命名] [远程仓库地址] - 创建一个远程仓库分支,并建立远程分支和本地分支之间的追踪关系:
git push -u [远程仓库名] [分支名]
- 添加一个新的远程仓库并命名:
- 常规推送
- 推送本地仓库代码到远程仓库对应分支:
git push [远程仓库名] [本地分支名]:[远程仓库分支名]- 如果本地仓库分支和远程仓库已经建立追踪关系,则可以直接
git push进行推送 - 如果本地分支和远程分支同名,则可以简写
git push [远程仓库名] [分支名]进行推送
- 如果本地仓库分支和远程仓库已经建立追踪关系,则可以直接
- 在本地分支和远程分支之间建立追踪关系(之后就可以简写进行代码推送、拉取的操作):
git branch --set-upstream-to=[远程仓库名]/[远程仓库分支名] [本地分支名]
- 推送本地仓库代码到远程仓库对应分支:
分支
- 查看所有本地分支和远程分支:
git branch -a - 查看本地分支追踪的远程分支关系:
git branch -vv - 本地分支之间的切换:
git checkout [本地分支名] - 以目前所在分支为基准,创建一个新的分支,并切换到此分支:
git checkout -b [新的分支名] - 拉取远程分支来创建一个新的本地分支:
git checkout - b [本地分支名] [远程仓库名]/[远程仓库的分支名]
状态查询
- 查询工作区当前状态(可以知道文件是否已经添加到暂存区或者提交到本地仓库以及远程仓库,还会有一些基本操作的命令提示,不知道怎么办的时候都可以执行此命令看看提示):
git status - 查看当前分支的历史commit记录(按回车键可以一直往下翻,q可以退出查看状态):
git log --graph --pretty=oneline
拉取远程仓库代码
- 将远程分支拉到本地并与本地分支合并:
git pull [远程仓库名] [远程分支名]:[本地分支名]- 本地分支和远程分支有追踪关系则可简写:
git pull git pull其实是git fetch [远程仓库名] [远程分支名]:[本地分支名]和git merge FETCH_HEAD两个步骤
- 本地分支和远程分支有追踪关系则可简写:
合并代码
- 切换到需要合并其他分支代码进来的分支上,然后进行代码合并:
git merge [需要合并进来的分支名] - 如果在合并过程中出现冲突,需要解决冲突。可以通过
git status命令找到冲突的地方,进行修改。当然我们如果用了vscode编辑器的话,直接找到感叹号的文件,这就是冲突的文件。git 使用<<<<<<<,=======,>>>>>>>标记出不同分支的内容的:<<<<<<< [这里面的内容属于当前分支改变的内容 current change] =======而======= [这里面的内容属于合并进来的分支的内容 incomming change] >>>>>>>。最后,修改完成之后正常走git add和git commit就可以完成合并冲突的整个流程了。 - 取消代码合并:
git merge --abort
暂存代码
- 暂不想提交的代码可以暂存起来,从而回到之前最后一次提交的干净的工作仓库状态:
git stash - 查看stash栈里面保存的列表信息:
git stash list - 释放出之前修改的文件,默认是stash最后一次的内容:
git stash pop - 清除stash栈中的第一条记录:
git stash drop - 清除stash栈中所有的列表信息:
git stash clear
回退版本
- 回退到上一个版本,工作区内容不变:
git reset --soft head^ - 回退到上一个版本,并删除之前的所有信息提交(慎用,真的会删除,当然没有推送到远程仓库之前,可以通过拉取远程仓库的代码找回):
git reset --hard head^ - 回退到具体的版本,先查看提交记录找到想要回退的版本号,然后进行回退:
git reset --soft [版本号]或者git reset --hard [版本号]
打 tag 标签
- 查看当前分支下所有tag:
git tag - 创建tag
- 创建新的tag:
git tag <tagName>例:git tag v1.0.0 - 创建带注释的tag:
git tag -a <tagName> -m 'some comments'例:git tag -a v1.0.0 -m 'some comments' - 补打以前记录的tag:
git tag <tagName> <commit id>例:git tag v1.0.0 d52c544
- 创建新的tag:
- 同步本地tag到远程仓库
- 同步指定tag(和同步分支一样):
git push <originName> <tagName>例:git push origin v1.0.0 - 一次性同步所有tag:
git push <originName> --tags例: git push origin --tags
- 同步指定tag(和同步分支一样):
- 删除tag:
- 删除本地tag:
git tag -d <tagName>例: git tag -d v1.0.0 - 删除远程仓库tag:
git push <originName> -d <tagName>或者git push origin :refs/tags/<tagName>例: git push origin -d v1.0.0
- 删除本地tag: