Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Git 分支


使用 Git 分支

在 Git 中,分支 是主仓库的新版本或独立版本。

假设你有一个大型项目,你需要更新其设计。

在有和没有 Git 的情况下,这将如何运作?

没有 Git

  • 复制所有相关文件以避免影响实时版本
  • 开始设计工作,发现代码依赖于其他文件中需要更改的代码!
  • 也复制依赖文件。确保每个文件依赖项都引用了正确的文件名
  • 紧急!项目中其他地方存在无关错误,需要立即修复!
  • 保存所有文件,并记录正在使用的副本的名称
  • 处理无关错误,更新代码以修复它
  • 返回设计,并完成那里的工作
  • 复制代码或重命名文件,以便更新的设计出现在实时版本中
  • (两周后,你意识到无关错误在新的设计版本中没有被修复,因为你在修复之前复制了文件)

使用 Git

  • 使用名为 new-design 的新分支,直接编辑代码,而不会影响主分支
  • 紧急!项目中其他地方存在无关错误,需要立即修复!
  • 从主项目创建一个名为 small-error-fix 的新分支
  • 修复无关错误并将 small-error-fix 分支合并到主分支
  • 你返回 new-design 分支,并完成那里的工作
  • 将 new-design 分支与主分支合并(并提醒你缺少的小错误修复)

分支允许你处理项目的不同部分,而不会影响主分支。

工作完成后,可以将分支与主项目合并。

你甚至可以在分支之间切换,并在不同的项目上工作,而不会互相干扰。

Git 中的分支非常轻量级,速度很快!


新建 Git 分支

让我们为 index.html 页面添加一些新功能。

我们在本地仓库中工作,我们不想干扰或可能破坏主项目。

因此,我们创建一个新的 分支

示例

git branch hello-world-images

现在,我们创建了一个名为 "hello-world-images" 的新 分支

让我们确认我们已经创建了一个新的 分支

示例

git branch
  hello-world-images
* master

我们可以看到名为 "hello-world-images" 的新分支,但 master 旁边的 * 指定我们目前在该 分支 上。

checkout 是用于检出 分支 的命令。将我们从当前 分支 移动到命令末尾指定的 分支

示例

git checkout hello-world-images
Switched to branch 'hello-world-images'

现在,我们已将当前工作区从 master 分支移动到新的 分支

打开你喜欢的编辑器并进行一些更改。

在此示例中,我们在工作文件夹中添加了一个图像(img_hello_world.jpg),并在 index.html 文件中添加了一行代码

示例

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space"
style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<p>A new line in our file!</p>

</body>
</html>

我们已对文件进行了更改,并在工作目录(与 main 分支 相同的目录)中添加了一个新文件。

现在检查当前 分支 的状态

示例

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 有所更改,但该文件尚未暂存以供 提交
  • img_hello_world.jpg 未被 跟踪

因此,我们需要将这两个文件都添加到此 分支 的暂存区

示例

git add --all

使用 --all 而不是单独的文件名将 暂存 所有更改(新建、修改和删除)的文件。

检查 分支状态

示例

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

我们对更改感到满意。因此,我们将它们提交到 分支

示例

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

现在,我们有了新的 分支,它与 master 分支 不同。

注意:checkout 上使用 -b 选项将创建新的分支并移动到该分支,如果该分支不存在



在分支之间切换

现在让我们看看使用不同分支是多么快速和容易,以及它的效果如何。

我们目前在 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>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<p>This is the first file in my new Git Repo.</p>
<p>This line is here to show how merging works.</p>

</body>
</html>

我们已对该文件进行了更改,我们需要将这些更改获取到 master 分支。

检查状态

示例

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  

开始练习


×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.