Git仓库简介

1、工作区、暂存区、仓库

Git仓库简介_第1张图片

工作区:电脑里能看到的目录。

暂存区:工作区有一个隐藏目录.git,是Git的版本库,Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

仓库:远程服务器中的项目。

2、git版本控制

git版本控制一般有两个命令 reset 和 revert。reset 代表将当前节点“销毁”(回退,节点还存在),就像不存在一样;revert 代表创建一个新的节点,其中记录我要删除当前节点。其中reset 中有 三个参数需要注意:

--mixed 默认参数,重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。

--soft 回退到某个版本。

--hard 撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交。

执行 git reset HEAD
Git仓库简介_第2张图片

执行 git revert HEAD
Git仓库简介_第3张图片

撤销修改:

对文件做了修改,现在需要撤销修改:

git restore <文件名>

或者

git checkout -- 文件名

如果文件已经add,但还没commit,可以使用以下命令,撤销add,恢复到上一步状态:

"git restore --staged <file>

或者

git reset HEAD 文件名

如果已经commit,需要删除文件,

1、被提交到仓库的某个文件需要删除,可以使用 git rm 命令:
git rm <file>
git commit -m ""

2、如果只想从暂存区删除文件,本地工作区不做出改变,可以:
git rm --cached <file>

3、分支管理

3.1 创建/删除分支

一般 master 分支用于发布版本,开发都是其他他分支上进行,也会存在一些 bugFix 分支,feature 分支用于开发未来的功能。创建分支有以下三种命令:

git branch 分支名

git checkout -b 分支名

git switch -c 分支名

删除分支

git branch -d 分支名

3.2 分支管理策略

分支管理一般基于三个命令进行,分别未 merge、rebase、cherry-pick

3.2.1 merge

merge的合并方式默认是 fast-forward,即将master 指针直接指向当前节点。例如我们创建 readme.txt 文件,并且add 和 commit,此时创建分支 dev , 此时git 的 graph 如下;

git switch -c dev

Git仓库简介_第4张图片
我们对readme.txt 文件做修改,并切换到 master 分支,使用 git merge dev 命令,git 的graph 如下:
Git仓库简介_第5张图片

可以看到 git 并没有创建新的节点,而是将 master 指针快速移动到了dev分支,如果要保存开发记录,我们可以显示禁用掉 fas-forward 模式 ,即在merge 后加上参数 --no-ff

git merge --no-ff -m "说明文字" 分支名

此时,git的graph如下,可以看到,git创建了一个新的节点,继承了dev分支。
Git仓库简介_第6张图片

3.2.2 rebase

rebase比较有意思,翻译成中文名叫”变基“,我个人把他理解成剪切,就像 ctrl + x 一样,将当前分支黏贴到目标分支。这是原始的 graph。
Git仓库简介_第7张图片

我们使用以下命令:

git switch Feature

git rebase master

此时,git 的 graph 变为下面模样
Git仓库简介_第8张图片

可以,看到feature分支接到了master后面。需要注意的是,rebase 提供了 -i 参数,是”剪切”变得更加灵活,可以自己尝试一下。那么 rebase 和 merge 的区别在哪里?

假如master和feature开发了不同的功能,即两个分支没有文件冲突,和3.2.1的情况不一样(dev分支继承在master分支),此时我们执行命令:

git switch master

git merge feature

此时,git的 graph 如下所示:
Git仓库简介_第9张图片

3.2.3 cherry-pick

这个命令就比较简单了,他就相当于复制节点到当前分支。

需要注意的是我们在合并前都需要git commit 将暂存区的内容提交到分支中。

4、标签

分支可以移动,当一个节点打上标签后这个标签就在这个节点上,不会移动。那么我们只需要记住一些命令就好了:

#创建标签
git tag 标签名 commit_id

#指定标签信息
git tag -a <tagname> -m "blablabla..."

#删除标签
git tag -d 标签名

#推送某个标签到远程
git push origin xxxx

#删除远程标签,需要首先删除本地标签
git tag -d 标签名
git push origin :refs/tags/标签名

5、push、pull、fetch

如果要与远程仓库交互,就需要用到这三个命令,其中 pull 是 fetch 和 merge 的结合。

5.1 fetch

fetch 是从远程仓库抓取 origin/master 节点,

git fetch origin/[branch]

5.2 pull

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

5.3 push

将本地仓库推送到远程仓库,

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

如果本地分支名与远程分支名相同,则可以省略冒号:

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

删除远程仓库分支

git push origin --delete master

git push origin :分支名

6、其他命令

  • git status 查看状态
  • git diff 查看文件改动
  • git log
  • git stash(暂存当前工作区)
  • 相对引用,git checkout master^2(切换父节点)

追踪远程分支:

git checkout -b 本地分支 远程分支

git branch -u 远程分支  本地分支

7、git log

显示分支图

git log --graph --pretty=oneline --abbrev-commit

8、关闭远程链接

git remote remove origin

你可能感兴趣的:(git)