git 笔记/常见命令/as的fetch,pull ,update project的区别/标签管理

Git概念汇总

头(HEAD)

头(HEAD)HEAD类似一个“指针”,指向当前活动 分支 的 最新版本。

工作区(Workspace)

 就是在电脑里能看到的项目代码库目录,是我们搬砖的地方,

在这里我们可以新增文件、修改文件内容,或删除文件。

此时的项目代码库目录还是红色的(没有与git关联),未被git跟踪

此时的工作区的代码修改是不能直接保存到本地仓库的,

需要通过 git add(暂存)把整个项目工程提交到暂存区,

这时项目工程就变成绿色的了,就被gti跟踪了,

在暂存区修改的代码内容 只有通过git commit才能将暂存区修改的内容提交到Git本地仓库

暂存区(stage或index)

    用于临时存放文件的修改,

 用git add 命令将工作区的项目工程代码保存到暂存区,此时的项目工程就被git跟踪了

在暂存区里未修改的代码文件是绿色的, 修改的代码文件是蓝色的

版本库/仓库 Repository

通过git commit 命令将暂存区的内容正式提交到版本库(本地仓库)。

master 为仓库的默认分支master,HEAD是一个“指针”指向当前分支的最新提交,默认指向最新的master。

 通过git push 将本地仓库推送到远程仓库

通过git  pull  从服务端仓库文件拉取更新到本地仓库

git 笔记/常见命令/as的fetch,pull ,update project的区别/标签管理_第1张图片

 

git 笔记/常见命令/as的fetch,pull ,update project的区别/标签管理_第2张图片

 

git常见命令

 

git常见命令

git branch

列出所有本地分支,加参数-v显示详细列表,

git branch -r

列出所有远程分支

 git branch -a

列出所有本地分支和远程分支

git branch -d dev

删除dev分支,-D(大写)强制删除 

git checkout -b dev

从当前分支创建并切换到dev分支

git checkout -b feature1 dev

从本地dev分支代码创建一个 feature1分支,

git switch:

专门只是用来实现分支切换。

git switch dev 

只是切换到dev分支

git reset:

  将已经提交到本地仓库的文件,撤销回退到暂存区(替代checkout的撤销功能。)

                git commit  -m "first commit"

                将暂存区的修改文件提交到本地仓库

               git commit -a

               直接提交工作区的修改内容到本地仓库

              git branch -M "分支名称"

             创建本地分支

            git remote add origin https://github.com/fmf19870210/FMFNote.git

           关联远程git仓库地址

         git push -u origin master

     本地仓库 远程提交主支

git fetch

一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到git fetch命令。

git fetch命令通常用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响。远程代码取回到本地并不会合并到你的本地分支里去。

git fetch <远程主机名>

git fetch origin

默认情况下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。

 git fetch <远程主机名> <分支名>

//比如,取回origin主机的master分支。
 git fetch origin master

git pull

先拉取git fetch 某个远程分支的代码,然后再git merge 合并到当前本地分支 或指定的某个本地分支

git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。

git pull <远程主机名> <远程分支名>:<本地分支名>

//比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。
git pull origin next:master

git pull origin master:master

git pull origin dev:dev

如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

git pull origin next

git pull origin master

git pull origin dev

as的fetch,pull ,update project的区别

git fetch 从远程分支上获取最新版本代码 到本地 ,代码不会合并 merge到当前分支

git pull 从远程分支上拉取最新版本代码 到本地并自动合并 merge到当前分支

git pull =git fetch 和 git merge

update project 会更新项目所有module,但是pull只会更新一个。

合并merge&冲突

git merge dev  dev合并到master没有冲突

合并dev到master,注意要先切换到master分支,然后执行git merge dev,master分支上没有修改内容,直接把dev合并到当前分支master。git 笔记/常见命令/as的fetch,pull ,update project的区别/标签管理_第3张图片

git merge dev  dev合并到master有冲突

把分支dev 8合并到已经修改过内容的分支master 6 
   有冲突需要人工手动解决 合并到新的分支master 9分支上 
   为最新的master分支

git 笔记/常见命令/as的fetch,pull ,update project的区别/标签管理_第4张图片

    <<<<<<< HEAD开头的内容就表示是有冲突的部分,需要人工处理,

=======分割线上方是当前分支的内容,下方是被合并分支的变更内容。

git 笔记/常见命令/as的fetch,pull ,update project的区别/标签管理_第5张图片

标签管理

标签(Tags)指的是某个分支某个特定时间点的状态,是对某一个提交记录的的固定“指针”引用。一经创建,不可移动,存储在工作区根目录下.git\refs\tags。可以理解为某一次提交(编号)的别名,常用来标记版本。所以发布时,一般都会打一个版本标签,作为该版本的快照,指向对应提交commit。

当项目达到一个关键节点,希望永远记住那个特别的提交快照,你可以使用 git tag给它打上标签。比如我们今天终于完成了V1.1版本的开发、测试,并成功上线了,那就可给今天最后这个提交打一个标签“V1.1”,便于版本管理。

git 笔记/常见命令/as的fetch,pull ,update project的区别/标签管理_第6张图片

git tag 查看标签列表

git show [tagname] 查看标签信息

git tag [tagname] 创建一个标签

git tag -a v5.1 -m'v5.1版本'

创建标签v5.1.1039,-a指定标签名,-m指定说明文字

git tag -d [tagname]    删除本地标签

git push origin [tagname]   推送某个标签tagname到远程

git push origin --tags 一次性推送全部标签到远程

后悔药-怎么撤销变更?

发现写错了要回退怎么办?看看下面几种后悔指令吧!

 还没本地提交的怎么撤销?

修改的内容还没提交到工作区、暂存区,不想要了 

使用reset 本地回滚撤销

已提交到本地但没有push到远程的如何撤销?

修改的内容已经提交到工作区、暂存区,不想要了 

使用reset、revert本地回滚撤销

已push到远程的如何撤销?

先使用reset、revert本地回滚撤销

然后强制推送git push origin -f

后悔指令

git 笔记/常见命令/as的fetch,pull ,update project的区别/标签管理_第7张图片

 

checkout指令

git checkout / git checkout [file] 

撤销/清除工作区中 所有的修改内容(该修改内容未添加到暂存区),用暂存区替换当前的工作区。

git checkout HEAD / git checkout HEAD [file] 

撤销/清除工作区、暂存区的修改内容(已经通过git add  将工作区暂存到了暂存区)

用HEAD指向的当前分支最新版本替换工作区、暂存区的版本

reset回退版本指令

reset是专门用来撤销修改、回退版本的指令,支持的场景比较多,多种撤销姿势,所以参数组合也比较多。简单理解就是移动master分支、HEAD的“指针”地址,理解这一点就基本掌握reset了。

reset有三种模式,对应三种参数:mixed(默认模式)、soft、hard。三种参数的主要区别就是对工作区、暂存区的操作不同。

  • mixed为默认模式,参数可以省略。

  • 只有hard模式会重置工作区、暂存区,一般用这个模式会多一点。

git 笔记/常见命令/as的fetch,pull ,update project的区别/标签管理_第8张图片

 

git reset/git reset HEAD/git reset HEAD [file] 

撤销暂存区状态,不影响工作区

git reset [commit]

回退到指定版本,清空暂存区,不影响工作区。

git reset/git reset HEAD/git reset HEAD [file] (HEAD可省略)

撤销暂存区状态,不影响工作区

git reset [commit]

回退到指定版本,清空暂存区,不影响工作区。工作区需要手动git checkout签出

git reset --soft [commit]

移动分支master、HEAD到指定的版本,不影响暂存区、工作区,需手动git checkout签出更新

git reset --hard HEAD

撤销工作区、暂存区的修改,用当前最新版

git reset --hard HEAD~

回退到上一个版本,并重置工作区、暂存区内容。

git reset --hard [commit]

git reset --hard 5f8b961

回退到指定版本,并重置工作区、暂存区内容。

reset案例

git reset --hard v4 或 git reset --hard HEAD~2

回退到版本v4  master、HEAD指针移动到v4。v5、v6就被废弃了。

git 笔记/常见命令/as的fetch,pull ,update project的区别/标签管理_第9张图片

 

git reset --hard v6

也可以重新恢复到v6版本  移动master、HEAD的“指针”地址到V6

git 笔记/常见命令/as的fetch,pull ,update project的区别/标签管理_第10张图片

 

revert提交撤销某个版本的指令

安全的撤销某一个提交记录,基本原理就是生产一个新的提交,用原提交的逆向操作来完成撤销操作。注意,这不同于reset,reset是回退版本,revert只是用于撤销某一次历史提交,操作是比较安全的。

git revert[commit]

撤销之前的一个提交,

会生成一个新的提交     来完成    撤销之前的一个提交  操作,

案例

git revert v4    -m'撤销对***的修改'
 

 这个提交的指令就是撤销v4版本 v4版本就不存在了

同时更新maser、HEAD“指针”位置,以及工作区内容。

“-m”附加说明”

git 笔记/常见命令/as的fetch,pull ,update project的区别/标签管理_第11张图片

 

感谢

我看谁还不懂 Git !(万字长文)

你可能感兴趣的:(git,git,github)