Git 分支
使用 Git 分支
在 Git 中, branch
是主存储库的一个新的/独立的版本。
假设您有一个大型项目,您需要更新其设计。
使用 Git 和不使用 Git 时该如何工作:
没有 Git:
- 复制所有相关文件以避免影响实时版本
- 开始设计并发现代码依赖于其他文件中的代码,这些代码也需要更改!
- 复制依赖文件。确保每个文件依赖项都引用正确的文件名
- 紧急情况!项目中其他地方存在不相关的错误,需要尽快修复!
- 保存所有文件,记下你正在处理的副本的名称
- 处理不相关的错误并更新代码来修复它
- 回到设计,并在那里完成工作
- 复制代码或重命名文件,以便更新后的设计出现在实时版本上
- (两周后,你意识到不相关的错误没有在新的设计版本中修复,因为你复制了修复之前的文件)
使用 Git:
- 使用名为 new-design 的新分支,直接编辑代码而不影响主分支
- 紧急情况!项目中其他地方存在不相关的错误,需要尽快修复!
- 从主项目创建一个名为 small-error-fix 的新分支
- 修复不相关的错误,并将 small-error-fix 分支与主分支合并
- 你回到新设计分支,并在那里完成工作
- 将新设计分支与主分支合并(提醒您遗漏的小错误修复)
分支允许您处理项目的不同部分而不会影响主分支。
当工作完成后,分支可以与主项目合并。
您甚至可以在分支之间切换并处理不同的项目,而不会互相干扰。
Git 中的分支非常轻量且快速!
新的 Git 分支
让我们添加一些新功能 index.html
页。
我们正在本地存储库中工作,我们不想干扰或破坏主要项目。
所以我们创建一个新的 branch
:
例子
git branch hello-world-images
现在我们创建了一个新的 branch
被称为“hello-world-images
"
让我们确认一下我们已经创建了一个新的 branch
:
例子
git branch
hello-world-images
* master
我们可以看到名为“hello-world-images”的新分支,但是 *
旁master
指定我们当前处于该状态branch
.
checkout
是用来检查的命令branch
. 感动我们 从 当前branch
, 到 命令末尾指定的那个:
例子
git checkout hello-world-images
Switched to branch 'hello-world-images'
现在,我们已将当前工作区从 master 分支移至新的 branch
打开您最喜欢的编辑器并做一些更改。
对于此示例,我们在工作文件夹中添加了一个图像 (img_hello_world.jpg),并在 index.html
文件:
例子
<!DOCTYPE html>
<html>
<head>
<title>你好世界!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>你好世界!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space"
样式="宽度:100%;最大宽度:960px"></div>
<p>这是我的新 Git Repo 中的第一个文件。</p>
<p>我们的文件中有一个新行!</p>
</body>
</html>
我们对文件进行了更改,并在工作目录中添加了一个新文件(与 main
branch
).
现在检查当前状态 branch
:
例子
git status
On branch hello-world-images
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.html
Untracked files:
(use "git add <file>..." to include in what will be committed)
img_hello_world.jpg
no changes added to commit (use "git add" and/or "git commit -a")
让我们来看看这里发生了什么:
- 我们的 index.html 有变化,但该文件没有暂存
commit
img_hello_world.jpg
不是tracked
因此我们需要将这两个文件添加到暂存环境中 branch
:
例子
git add --all
使用 --all
而不是单独的文件名阶段 所有更改的(新的、修改的和删除的)文件。
检查 status
的branch
:
例子
git status
On branch hello-world-images
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: img_hello_world.jpg
modified: index.html
我们对我们的变化感到满意。因此我们将提交给 branch
:
例子
git commit -m "Added image to Hello World"
[hello-world-images 0312c55] Added image to Hello World
2 files changed, 1 insertion(+)
create mode 100644 img_hello_world.jpg
现在我们有了一个新的 branch
,与主人不同 branch
.
笔记: 使用-b
选项checkout
如果不存在,将创建一个新分支并移动到该分支
在分支之间切换
现在让我们看看使用不同分支工作有多么快捷、容易,以及它运行得如何。
我们目前在分支 hello-world-images
。我们向这个分支添加了一个图像,因此让我们列出当前目录中的文件:
例子
ls
README.md bluestyle.css img_hello_world.jpg index.html
我们可以看到新的文件 img_hello_world.jpg
,如果我们打开 html 文件,我们可以看到代码已被更改。一切正常。
现在,让我们看看将分支更改为 master
例子
git checkout master
Switched to branch 'master'
新镜像不属于此分支。再次列出当前目录中的文件:
例子
ls
README.md bluestyle.css index.html
img_hello_world.jpg
不再存在!如果我们打开 html 文件,我们可以看到代码恢复到了修改之前的状态。
看看使用分支工作有多简单?这如何让你处理不同的事情?
紧急部门
现在想象一下我们还没有完成 hello-world-images,但是我们需要修复master上的错误。
我不想直接弄乱 master,也不想弄乱 hello-world-images,因为它还没有完成。
因此我们创建一个新的分支来应对紧急情况:
例子
git checkout -b emergency-fix
Switched to a new branch 'emergency-fix'
现在我们已经从 master 创建了一个新的分支,并修改了它。我们可以安全地修复错误,而不会干扰其他分支。
让我们修复我们想象的错误:
例子
<!DOCTYPE html>
<html>
<head>
<title>你好世界!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>你好世界!</h1>
<p>这是我的新 Git Repo 中的第一个文件。</p>
<p>此行用于展示合并的工作原理。</p>
</body>
</html>
我们对此文件进行了更改,我们需要将这些更改发布到主分支。
检查状态:
例子
git status
On branch emergency-fix
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
暂存文件并提交:
例子
git add index.html
git commit -m "updated index.html with emergency fix"
[emergency-fix dfa79db] updated index.html with emergency fix
1 file changed, 1 insertion(+), 1 deletion(-)
现在我们已经为 master 准备好了修复,我们需要合并这两个分支。