最适合网络开发者的网站
放置您的广告!
Git。W3Schools 英文版。初学者课程

尿素

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"&gt;</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 而不是单独的文件名阶段 所有更改的(新的、修改的和删除的)文件。

检查 statusbranch:

例子

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 准备好了修复,我们需要合并这两个分支。

通过练习测试自己

锻炼:

创建一个名为 hello-world-images:

git  


放置您的广告!