一、git是什么?
Git是目前世界上最先进的分布式版本控制系统(没有之一),什么是版本控制?大白话就是可以控制每个人每一次提交,保证代码互不干扰,可进行历史记录查询、回退版本、分支合并,极大的提高了协同开发的效率
二、几大架构?重要
- 本地缓存
一般指git clone
后的状态,即将代码缓存cache到本地 - 暂存区
一般指git add
之后的状态,即将代码添加至暂存区 - 本地仓库
一般指git commit
之后的状态,即将代码提交到本地仓库 - 远端仓库
一般指git push
之后的状态,即将代码推送到在远端仓库
三、git命令?场景?
1、查看
- 查看所有分支
git branch -a
- 查看分析信息
git branch -v
- 查看本地分支与远程分支关系
git branch -vv
- 查看本地与上一次暂存区的差异
git status
- 查看文件与上一次暂存区的差异。假设文件为test.py
git diff test.py
- 查看本地与远端仓库分支分支映射是否异常
git remote show origin
- 查看本地缓存序列
git stash list
- 查看stash缓存具体内容,数字0代表序列为0的缓存
git stash show stash@{0}
- 查看所在分支历史提交记录
git log
- 查看文件在git中的跟踪状态
git status -sb
2、删除
- 删除git索引,删除本地文件。假设文件为test.txt
git rm test.txt
- 删除git索引,保留本地文件。假设文件为test.txt
git rm --cache test.txt
- 删除本地分支(常用),假设分支为test
git branch -d test
- 强制删除本地分支,应用场景一般为合并不完全导致push失败,解决方案一般是强制删除未完全合并分支,重新从远端库拉取分支。假设分支为test
git status -D test
- 删除远端分支。假设远端分支为test
git push --delete origin test
- 删除某个缓存cache,数字0代表序列为0的缓存
git stash drop stash@{0}
- 删除所有缓存
git stash clear
3、增加
- 将远端仓库拉取(映射)到本地。假设项目地址为test
git clone test
- 拉取远端库最新代码至本地
git pull
- 将本地仓库的修改提交到远端仓库
git push
- 将某个文件添加到暂存区。假设文件为test.txt
git add test.txt
- 将当前路径下的所有文件及目录添加到暂存区
git add .
- 新建本地分支(新分支索引模板即当前所在分支)。假设新分支名为test(切记不可与远端分支名重复,否则此操作不再是新建分支,而是拉取远端分支到本地)
git branch test
- 新建远程分支。假设本地/远程分支名都为test。分两步:①新建本地分支 ②推送到远端仓库
①git branch test
②git push origin test:test # 第一个test是本地分支名,第二个是远端分支名
- 新增cache缓存,数字0代表新增序列为0的缓存
git stash save 0
- 提交暂存区代码至本地仓库并添加备注信息。假设备注信息为test
git commit -m test
4、修改
- 修改本地分支名字。假设当前分支名为oldName,修改后分支名为newName
git branch -m oldName newName
- 修改提交到本地仓库的备注信息
git commit --amend
5、回退
- 将本地修改但未提交到缓存区的文件回退到未修改前的状态。假设文件为test.py
git restore test.py
- 将某个add(添加)到暂存区的文件回退到本地,但本地所做修改依旧存在。假设文件为test.py
git reset head test.py
- 将add(添加)到暂存区的所有文件回退到本地,但本地所做修改依旧存在
git restore --staged
- commit提交回退后所有修改都不保留(慎用)
git reset --hard HEAD^
- commit提交回退到add之前,保留本地修改,一般也用于分支回退(最常用)
git reset --mixed HEAD^
等同于git reset HEAD^
- commit提交回退到add之后,commit之前
git reset --soft HEAD^
- 将某个保存在缓存区的修改回退到当前分支,而且所有相关文件都变为未缓存状态。假设缓存序列为0
git stash apply stash@{0}
- 将某个保存在缓存区的修改回退到当前分支,但不修改已add(添加)到暂存区文件的状态。假设缓存序列为0
git stash apply stash@{0} --index
- 将最近的一次缓存区的修改回退到当前分支,相关文件都变为未缓存状态
git stash pop
6、组合命令
- 新建本地分支并切换到新建分支。假设新建分支为test
git checkout -b test
- 添加本地修改至暂存区&提交到本地仓库。假设备注信息为test
注:本地修改不包含新文件(不在git跟踪范围)git commit -am test
7、合并
注:merge合并时,要变更的分支(即当前所处分支)内不应存在未commit的文件,否则会导致这些文件无法恢复到merge前的状态。解决方法是merge之前将其stash到缓存中,merge结束后pop再还原回来
- 不同分支合并某次commit提交(无需push,有commit号即可合并)。假设commit号为test001
git cherry-pick test001
- 单个分支将多次提交记录合并成一个提交记录。假设起始合并的commit号的上一个commit号为test001(包尾不包头)
git rebase -i test001
- 将dev分支修改信息合并到master(目前处于master分支中,将会修改master分支内容)
git merge dev
8、补充
- 本地关联远程分支。假设本地分支名为test,远端分支名为ogn_test
git branch --set-upstream-to=origin/ogn_test test
- git reset --merge 退回merge之前
- 放弃合并并恢复到合并前的状态。网上有说相同效果如
git reset --merge
,其实这是老版本的语法,最新的语法合并回退命令如下:git merge --abort
9、场景
- 删除远端分支test
①、先将要删除的远端分支test拉到本地git checkout test
②、切换到其它分支以便删除git checkout dev
③、执行删除远端分支命令git push --delete origin test
,须知,此时只是删除了远端分支,本地分支还存在,只是缺少了上游分支
④、输入账号密码确认删除操作 - 删除在本地有但在远程库中已经不存在的分支
①、查看远端分支情况(是否删除)git remote show origin
,输入账号密码确认查看
②、更新本地远程仓映射(即保持本地映射与远端仓对应)git remote prune origin
- 远端分支更名
①、切换到其它分支git checkout dev
②、先修改本地分支名字git branch -m test newName
③、删除远端旧分支git push --delete origin test
④、将新分支推远程仓库git push origin newName
⑤、把修改后的本地分支与远程分支关联git branch --set-upstream-to origin/newName
三、结束
以上就是本文全部内容,希望可以给予你们以帮助!