首页 分享 Git操作指南:版本控制与分支管理

Git操作指南:版本控制与分支管理

来源:花匠小妙招 时间:2025-01-05 22:50
git指南及知识点目录 一、版本进退二、工作区和版本库2.1 工作区 Working Directory2.2 版本库 Repository2.3 工作区和版本库穿梭2.3.1 撤销本地修改2.3.2 撤销 add 操作2.3.3 撤销 commit 操作 2.4 删除文件 三、分支3.1 HEAD 和 master3.2 关联一个远程库3.3 查看分支与当前位置3.4 从已有的本地分支切出新分支3.5 合并流程3.6 删除分支3.7 git stash3.8 cherry-pick 四、远程4.1 查看远程库信息4.2 克隆某个分支或所有分支4.3 设置本地远程分支映射4.4 查看本地分支和远程分支的映射4.5 push 到远程分支4.6 pull 指定远程分支4.7 pull 指定远程分支并创建本地分支 五、配置 config5.1 作用域5.2 增删改查5.3 配置别名 六、commit讲解6.1 修改当前commit6.2 -a 标志

一、版本进退

每commit一次就产生一个版本(一个“存档”)

HEAD 表示当前版本

HEAD^ 表示上个版本

HEAD^^ 表示上上个版本

HEAD^^^ 表示上上上个版本

HEAD~100 表示上一百个版本

HEAD相当于一个指针,指向当前版本

用 git log 来列出目前版本(也就是HEAD指向的版本)以及之前的版本。

从现在穿梭回过去:

# 回到之前 commit id 以 “xxx” 开头的版本 $ git reset --hard xxx 12

这个操作实际上是改变HEAD指针的指向,并没有丢失当前的几个版本

此时用 git log 显示出来的是回退到的那个版本以及那个版本之前的版本

从过去穿梭回到现在:

如果后悔,想要去到最新的几个版本,但又无法用 git log 找到他们的 commit id,那么:

git reflog 可以帮你找到

二、工作区和版本库

2.1 工作区 Working Directory

工作区就是当前文件夹里的源文件源代码们

2.2 版本库 Repository

版本库是当前文件夹里的 .git 文件夹,它包含着项目的版本

版本库包含:

暂存区(stage):

# 将工作区(working directory)的文件xxx的修改,添加到暂存区(stage) $ git add xxx 12

master 分支:

HEAD指向这个master分支

# 将暂存区(stage)的文件提交到当前HEAD分支 $ git commit -m "xxx" 12

2.3 工作区和版本库穿梭

git add:工作区 (working directory) --> 暂存区 (stage)

git commit:stage --> HEAD 分支

git diff:用来比较工作区和暂存区一个文件的差异

2.3.1 撤销本地修改

撤销本地修改,等同于:重回暂存区 (stage),撤销工作区 (working directory)

# 丢弃在工作区的xxx文件的改变 $ git checkout -- <file> # 把 README.txt 在工作区 (working directory) 的修改全部撤销 $ git checkout -- README.md git checkout . #本地所有修改的。没有的提交的,都返回到原来的状态 git stash #把所有没有提交的修改暂存到stash里面。可用git stash pop回复。 git reset --hard HASH #返回到某个节点,不保留修改,已有的改动会丢失。 git reset --soft HASH #返回到某个节点, 保留修改,已有的改动会保留,在未提交中,git status或git diff可看。 git clean -df #返回到某个节点,(未跟踪文件的删除) git clean 参数 -n 不实际删除,只是进行演练,展示将要进行的操作,有哪些文件将要被删除。(可先使用该命令参数,然后再决定是否执行) -f 删除文件 -i 显示将要删除的文件 -d 递归删除目录及文件(未跟踪的) -q 仅显示错误,成功删除的文件不显示 注: git reset 删除的是已跟踪的文件,将已commit的回退。 git clean 删除的是未跟踪的文件

1234567891011121314151617181920212223 情况一: README.txt 已经在暂存区(stage),但是在工作区(working directory)又被修改。 t = 0:git add README.txtt = 1:修改 README.txt使用 git checkout -- README.md 可以让 README.md 变成 t = 0 的样子 情况二:README.txt 还没有被添加到版本库(stage或master分支)。 使用 git checkout -- README.md 会让README.md 变成当前版本库的样子 2.3.2 撤销 add 操作

撤销add,等同于:重回工作区 (working directory) ,撤销暂存区 (stage)```

$ git reset HEAD xxx # 将已经在暂存区的README.md撤销,换句话说,把已经 git add 的文件撤销 $ git reset HEAD README.md 1234 2.3.3 撤销 commit 操作

# --soft # 不删除工作空间改动代码,撤销commit,不撤销git add . ==> 撤销了commit,代码仍然保留。 git reset --soft HEAD^ # --hard 删除工作空间改动代码,撤销commit,撤销git add . ==> 代码不保留,恢复到上一次的commit状态。 git reset --soft HEAD^ 1234567

HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2

2.4 删除文件

在 git add 和 git commit 之后,又删除了工作区 (working directory) 一个文件,例如 rm test.txt:

这时候工作区就和版本库不一致了

情况一:确实想删除

要用 git rm 将本地删除的文件在版本库里也删除。然后再 git commit 提交这个情景

情况二:手误将本地test.txt删除

使用 git checkout – test.txt 重回暂存区,撤销本地操作。

三、分支

3.1 HEAD 和 master

HEAD 和 master

HEAD 指向当前分支

例如:在 master 分支上,创建一个 dev 分支,那么 dev 指针和 master 指针指向同一个提交结点。在提交的话,就是提交到 dev 分支,此时 master 停滞不动,dev 往前走一步。由于 HEAD 指向 当前分支,则:HEAD 现在指向 dev 的最新提交结点

master 指向提交

合并 dev 到 master 时,master 指针指向 dev 指针所指向的提交结点。

3.2 关联一个远程库

$ git remote add origin https://github.com/GavinHU66/xxx.git 1

3.3 查看分支与当前位置

$ git branch * dev master # -a: List both remote-tracking branches and local branches. Combine with --list to match optional pattern(s). $ git branch -a * gavinqyhu/dev master remotes/origin/HEAD -> origin/master remotes/origin/channel/master remotes/origin/develop remotes/origin/gavinqyhu/dev remotes/origin/master remotes/origin/message/master # -r # --remotes # List or delete (if used with -d) the remote-tracking branches. Combine with --list to match the optional pattern(s). $ git branch -r origin/HEAD -> origin/master origin/channel/master origin/develop origin/gavinqyhu/dev origin/master origin/message/master # -v, -vv, --verbose # -v: show sha1 and commit subject line for each head, #show relationship to upstream branch (if any). # -vv: #print the path of the linked worktree (if any) and the name of the upstream branch $ git branch -v * gavinqyhu/dev b74ddd6 chore: 修改渠道搜索url master f42003a docs: update readme $ git branch -vv * gavinqyhu/dev b74ddd6 [origin/gavinqyhu/dev] chore: 修改渠道搜索url master f42003a [origin/master] docs: update readme

12345678910111213141516171819202122232425262728293031323334353637

3.4 从已有的本地分支切出新分支

从已有分支拉出新分支创建 dev 分支

$ git branch dev 1

从已有分支切换到 dev 分支

$ git checkout dev 1

二合一:从已有分支创建并切换到 dev 分支

$ git checkout -b dev 1

3.5 合并流程

工作流程(快速合并,原master没有什么提交或修改):

创建 dev 分支,并切换工作区到 dev 分支

$ git checkout -b dev 或者 $ git switch -c dev 123 在 dev 分支上进行开发

$ // modify some files... 1 在 dev 分支上提交

$ git add . $ git commit -m "dev branch test" 12 切换回master分支

$ git checkout master 或者 $ git switch master 123 把dev分支的工作成果合并到master分支上

$ git merge dev 1 删除dev分支

$ git branch -d dev 1

快速合并

Fast forword,即为,可以的时候,合并时只改变指针。

0

如果想要禁用 Fast forward,加上 --no-ff 参数:

$ git merge --no-ff -m "merge with no-ff" dev 1

0

发生合并冲突:

与上文相反,无法快速合并:原master已经有它自己的修改或提交。

master 分支出 devmaster 开发并提交 feature1dev 开发并提交 feature2现在在master,将 dev 合入 master:git merge dev此时由于feature1 和 feature2 产生了冲突,合并失败,需要手动合并在master上,对冲突文件进行修改,在 git add / git commit

查看分支合并图:

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

3.6 删除分支

分支没有改动没commit:-d

$ git branch -d <branch_name> 1 分支还有改动没commit:-D

$ git branch -D <branch_name> 1

3.7 git stash

手头工作没有完成时,有新的快速需求/bug修复需求,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

将现场工作“储存”起来

$ git stash 1 恢复

## 恢复后,stash内容并不删除 $ git stash apply ## 删除 $ git stash drop ## 恢复的同时把stash内容也删除 $ git stash pop ## 多次stash,查看情况 $ git stash list ## 然后恢复指定的stash $ git stash apply stash@{0} 1234567891011121314

3.8 cherry-pick

复制一个特定的提交到当前分支

$ git cherry-pick <commit id> # 例子 $ git branch * dev master $ git cherry-pick 4c805e2 [master 1d4b803] fix bug 101 1 file changed, 1 insertion(+), 1 deletion(-) 123456789

四、远程

4.1 查看远程库信息

$ git remote origin ## 更详细信息 $ git remote -v origin http://git.code.oa.com/map-h5/couponCMS.git (fetch) origin http://git.code.oa.com/map-h5/couponCMS.git (push) 1234567

4.2 克隆某个分支或所有分支

克隆某个指定分支:

$ git clone -b <branch_name> https://... 1

克隆某个所有分支:

$ git clone https://... 1

4.3 设置本地远程分支映射

# 将本地分支关联到远程分支 $ git branch --set-upstream-to=origin/<remote_branch_name> <local_branch_name> # 例如,将本地 dev 分支关联到远程 dev 分支,origin通常指远程库 $ git branch --set-upstream-to=origin/dev dev # 在这之前,如果没有很久没有更新,即本地并不知道远程 dev 分支,可以用 git fetch 来获取远程分支信息 1234567

4.4 查看本地分支和远程分支的映射

$ git branch -vv * gavinqyhu/dev e7cd1f8 [origin/gavinqyhu/dev: ahead 1] fix: 渠道按位或搜索 master f42003a [origin/master] docs: update readme 1234

4.5 push 到远程分支

$ git push origin <branch_name> # 例如 $ git push origin master $ git push origin dev 12345

4.6 pull 指定远程分支

如果当前提交版本慢于远程版本,则需要先pull,再push

$ git pull # 再 commit 和 push $ git commit -m "fix conflict" $ git push origin dev 12345

4.7 pull 指定远程分支并创建本地分支

# 在本地新建分支x,并自动切换到该本地分支x # 采用此种方法建立的本地分支会自动和远程分支建立映射关系 git checkout -b 本地分支名x origin/远程分支名x # 例如: 将远程gavinqyhu/dev分支拉下来到新创建的本地gavinqyhu/dev分支 git checkout -b gavinqyhu/dev origin/gavinqyhu/dev # 在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout # 采用此种方法建立的本地分支会自动和远程分支建立映射关系 git fetch origin 远程分支名x:本地分支名x 12345678910

五、配置 config

5.1 作用域

--system: /etc/gitconfig:系统范围内的配置文件,适用于系统所有的用户; 使用 git config 时, 加 --system 选项,Git将读写这个文件。 --global: ${HOME}/.gitconfig:用户级的配置文件,只适用于当前用户; 使用 git config 时, 加 --global 选项,Git将读写这个文件。 --local: .git/config:Git项目级的配置文件,位于当前Git工作目录下,只适用于当前Git项目; 使用 git config 时,不加选项( --system 和 --global ),Git将读写这个文件。

优先级是: local > global > system, 而global存储的是提交用户的email和用户名,所以可手动设置config

5.2 增删改查

增:

$ git config --global --add configName configValue 1

删:

$ git config --global --unset configName (只针对存在唯一值的情况) 1

改:

$ git config --global configName configValue 1

查:

$ git config --global configName 1

查看配置

$ git config -l 1

设置用户名和邮箱

$ git config --global user.name [username] $ git config --global user.email [email] 12

5.3 配置别名

$ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch 123

六、commit讲解

6.1 修改当前commit

commit之后手误打错字并且不小心提交了,修改当前commit:

$ git commit --amend 1

6.2 -a 标志

-a, --all:表示告诉git,将所有new files和modified files 自动加进暂存区(stage),相当于一步 git add .操作

相关知识

智能移动应用开发完整指南
git上的分支命名规范
Cursor零基础小白教程系列「技巧」
基于自然语言处理的智能医疗诊断系统设计与实现
智能养花机
前端开发综合指南:HTML、CSS和JavaScript详解
基于PHP的在线购物系统开发实战指南:从零构建电商平台
如何学习前端开发:从入门到精通的指南
零起飞
老树新花:旧有项目的简易前端资源缓存处理

网址: Git操作指南:版本控制与分支管理 https://www.huajiangbk.com/newsview1462229.html

所属分类:花卉
上一篇: 2020NCCN软组织肉瘤指南中
下一篇: Android ANR日志分析指

推荐分享