Git 是一个分布式版本控制系统,广泛应用于软件开发中,帮助开发者管理代码的历史记录、进行协作开发。本文将详细介绍 Git 的常用命令及操作,帮助你快速掌握 Git 的基本使用,特别是如何进行分支管理、合并操作及解决合并冲突。

1. Git 基础概念

1.1 什么是 Git?

Git 是一个版本控制系统,它可以记录文件的更改历史,使你能够随时查看修改记录,并轻松回滚到之前的版本。Git 支持分布式版本控制,也就是说每个开发者的机器上都有代码的完整历史,不需要依赖中央服务器。

1.2 Git 仓库

  • 本地仓库:每个 Git 项目都包含一个 .git 文件夹,用来存储本地版本控制的历史记录。

  • 远程仓库:通常托管在 GitHub、GitLab 或 Bitbucket 等平台上的仓库,供团队成员协作开发使用。


2. Git 基本操作

2.1 初始化 Git 仓库

要将一个文件夹变成 Git 仓库,可以使用 git init 命令。这会在该文件夹中创建一个 .git 文件夹,从而启动版本控制:

git init

2.2 克隆远程仓库

如果你想从远程仓库获取代码,可以使用 git clone 命令:

git clone https://github.com/username/repo.git

该命令会将远程仓库复制到本地,并自动创建一个本地仓库。

2.3 查看仓库状态

你可以使用 git status 来查看当前文件夹下的文件状态(是否有修改、是否已经暂存):

git status
​
On branch main
Your branch is up to date with 'origin/main'.
​
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
        modified:   style.css
​
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        newfile.txt

解释

  1. 未暂存的更改index.htmlstyle.css 已被修改,但还未加入暂存区(使用 git add)。

  2. 未跟踪的文件newfile.txt 是新文件,Git 尚未跟踪它。

你可以通过以下操作处理这些文件:

  • git add index.html:将 index.html 添加到暂存区。

  • git restore index.html:撤销对 index.html 的修改。

  • git add newfile.txt:将 newfile.txt 添加到 Git 跟踪中。


3. 分支管理

分支是 Git 中一个非常重要的概念,它允许你在不影响主分支(main)的情况下进行开发。

3.1 查看当前分支

要查看当前项目中的分支,可以使用 git branch

git branch

3.2 创建并切换分支

使用 git checkout -b <branch-name> 命令可以创建一个新分支并立即切换过去:

git checkout -b feature-1

此命令会创建名为 feature-1 的分支,并切换到该分支。

3.3 切换到已有分支

如果你已经有了多个分支,可以通过 git checkout <branch-name> 切换到其他分支:

git checkout main

3.4 合并分支

当你在一个分支上完成了功能开发后,通常会将它合并到主分支(main)中。首先,切换到目标分支(例如 main),然后使用 git merge 命令合并:

git checkout main
git merge feature-1

这会将 feature-1 分支的内容合并到 main 分支中。


4. 远程仓库操作

4.1 查看远程仓库

你可以使用 git remote -v 查看项目的远程仓库地址:

git remote -v

4.2 推送更改到远程仓库

当你完成了本地的修改并提交后,可以使用 git push 将更改推送到远程仓库:

git push origin main

origin 是远程仓库的默认名称,main 是你要推送的分支。

4.3 拉取远程仓库的更新

如果有其他团队成员提交了代码,你可以使用 git pull 拉取远程仓库的最新代码:

git pull origin main

5. Git 合并与冲突解决

5.1 合并操作

合并是将两个分支的内容结合起来的过程。当你在开发过程中从一个分支切换到另一个分支并进行修改后,你需要将修改合并回主分支。

  1. 切换到目标分支(通常是 main)。

  2. 使用 git merge 合并源分支(例如 feature-1)。

git checkout main
git merge feature-1

5.2 合并冲突

当两个分支在同一部分代码上做出不同更改时,Git 会出现冲突。此时,Git 会标记冲突文件并要求开发者手动解决。

冲突文件会包含类似以下的标记:

<<<<<<< HEAD
这是当前分支的内容。
=======
这是功能分支中的内容。
>>>>>>> feature-1

这些标记表示两边有冲突,需要开发者选择保留哪一部分内容,或者将它们合并起来。手动解决冲突后,删除冲突标记并保存文件。

5.3 提交合并结果

解决冲突后,需要使用 git add 将修改后的文件添加到暂存区,然后进行提交:

git add <file-name>
git commit -m "已解决<文件名>中的合并冲突"

6. Git 重置与撤销操作

6.1 撤销对文件的修改

如果你对文件进行了修改,但尚未加入暂存区,可以使用 git checkout 撤销这些修改:

git checkout -- <file-name>

6.2 撤销已加入暂存区的修改

如果你已经将文件添加到暂存区,但不想提交,可以使用 git reset 将它们从暂存区移除:

git reset <file-name>

6.3 撤销最近的提交

如果你想撤销最近的提交,并保留文件更改,可以使用 git reset --soft

git reset --soft HEAD~1

如果你想彻底丢弃最近的提交(包括文件更改),可以使用 git reset --hard

git reset --hard HEAD~1

7. 标签管理

标签用于标记重要的提交,如发布版本。

7.1 创建标签

使用 git tag 命令创建标签:

git tag v1.0

7.2 推送标签到远程仓库

标签是不会自动推送到远程仓库的,你需要使用 git push 显式推送标签:

git push origin v1.0

8. 查看提交历史

Git 提供了强大的日志查看功能,帮助你回顾项目历史。

8.1 查看提交历史

使用 git log 查看提交历史:

git log

8.2 简洁显示提交历史

如果只需要查看简洁的提交记录,可以使用 --oneline 参数:

git log --oneline

9. 总结

在本教程中,我们介绍了 Git 的基础概念及常用命令。掌握以下操作将使你更高效地管理代码:

  • 初始化与克隆:使用 git initgit clone 来创建和获取仓库。

  • 分支管理:使用 git branchgit checkoutgit merge 管理分支,确保不同功能开发的并行进行。

  • 合并与冲突:了解如何解决合并冲突,确保代码顺利集成。

  • 远程操作:使用 git pushgit pull 同步本地和远程仓库的更改。

  • 撤销操作:使用 git resetgit checkout 撤销不需要的更改。

掌握这些 Git 操作后,你将能够高效地进行版本控制,并与团队成员协作开发。希望这篇教程能帮助你全面了解和使用 Git。