Git
一个免费开源的分布式版本控制系统
分布式版本控制系统是一种用于管理文件版本的系统,其中每个参与者都拥有完整的文件版本历史记录和存储库副本。这种系统使得团队成员能够在本地工作并进行版本控制,而不需要始终依赖中央服务器。
初始化仓库
- 打开命令行终端,并进入到你想要初始化仓库的目录中。
- 运行
git init
命令。
示例:
$ cd my-project # 进入到项目目录
$ git init # 初始化 Git 仓库
工作区域
-
工作目录 :也称为工作区,是你在计算机中能看到的文件夹,包含项目的实际文件,包括源代码、图片、文档等。
-
暂存区 :也称为索引(Index),是一个即将被提交到版本库的区域,通过
git add
命令将工作目录中的文件添加到暂存区。在提交之前,你可以对暂存区中的文件进行进一步的修改、调整,以准备提交到版本库中。 -
版本库 :也称为本地仓库,包含项目的完整历史记录和元数据信息。所有的版本信息都存储在版本库中,通过
git commit
命令将暂存区中的文件提交到版本库中。 -
文件在 Git 中具有不同的状态,主要包括以下几种:
-
未跟踪 :表示此文件还未纳入 Git 的版本控制中,Git 不会跟踪或管理这些文件。
-
已修改 :表示文件已经发生了改变,但还未被提交到暂存区。
-
已暂存 :表示文件已经被添加到了暂存区,准备被提交到版本库中。
-
已提交 :表示文件已经被安全地存储在版本库中,代表了一个已经被确认的文件版本。
- 添加追踪命令 (
git add
):git add <file>
:将指定文件添加到暂存区。git add .
或git add --all
:将所有未追踪或已修改的文件添加到暂存区。
示例:
$ git add file.txt # 将文件 file.txt 添加到暂存区
$ git add . # 将所有未追踪或已修改的文件添加到暂存区
- 提交命令 (
git commit
):git commit -m "Commit message"
:将暂存区中的文件提交到本地仓库,并添加一条提交信息。git commit -a -m "Commit message"
:可以跳过git add
步骤,直接将修改过的文件提交到本地仓库。
示例:
$ git commit -m "Add new feature" # 提交暂存区中的文件到本地仓库
在 Git 中,回退版本可以使用 git checkout
或 git reset
命令。它们有不同的用途和参数选项,可以选择不同的回退方式。
-
git checkout 命令:
git checkout <commit-hash>
:将 HEAD 指向指定的提交,并将工作区和暂存区恢复到此提交的状态。git checkout <branch-name>
:切换到指定的分支,并将工作区和暂存区切换到该分支的最新提交状态。git checkout -- <file>
:将指定文件从暂存区或最近的提交中恢复到工作区。
-
git reset 命令:
git reset --soft <commit-hash>
:回退到指定的提交,保留暂存区和工作区的修改。git reset --mixed <commit-hash>
或git reset <commit-hash>
:回退到指定的提交,重置暂存区,但保留工作区的修改。git reset --hard <commit-hash>
:回退到指定的提交,重置暂存区和工作区,丢弃所有的修改。
在回退版本时,<commit-hash>
可以是完整的提交哈希或缩写的提交哈希。此外,还可以使用一些其他参数来进一步控制回退操作,如 --hard
、--soft
、--mixed
等。
可选的回退方式有以下几种:
- 软重置(Soft Reset):使用
git reset --soft
,回退到指定的提交,保留暂存区和工作区的修改,并且将回退后的提交标记为未提交状态。 - 混合重置(Mixed Reset):使用
git reset --mixed
或git reset
,回退到指定的提交,重置暂存区,但保留工作区的修改,并且将回退后的提交标记为未提交状态。 - 硬重置(Hard Reset):使用
git reset --hard
,回退到指定的提交,重置暂存区和工作区,丢弃所有的修改,并且将回退后的提交完全删除。
.gitignore
文件中指定需要忽略的文件或目录:
# 忽略所有 .log 文件
*.log
# 忽略所有 build 目录
/build/
# 忽略特定文件
config.ini
# 使用感叹号表示不忽略某个文件
!important.log
对于不同的语言和框架,通常会有一些通用的文件或目录被添加到 .gitignore
文件中,这些文件包括但不限于:
- 编译产生的文件(如可执行文件、中间文件等)
- 日志文件、临时文件
- 依赖管理工具生成的目录或文件(如 node_modules、vendor 等)
- 配置文件(如本地配置、敏感信息等)
- IDE 或编辑器生成的文件或目录(如 .idea、.vscode 等)
Git 中用于进行分支操作的基本命令包括:
-
创建分支:
git branch <branch_name>
:在当前提交位置创建一个新分支。
-
切换分支:
git checkout <branch_name>
:切换到指定分支。git switch <branch_name>
:Git 2.23 版本之后推荐使用的切换分支命令。
-
创建并切换分支:
git checkout -b <new_branch_name>
:创建并切换到新分支。git switch -c <new_branch_name>
:Git 2.23 版本之后使用的创建并切换分支的命令。
-
查看所有分支:
git branch
:列出所有本地分支,当前分支前会有一个*
号。git branch -r
:列出所有远程分支。git branch -a
:列出所有本地和远程分支。
-
删除分支:
git branch -d <branch_name>
:删除指定分支(如果分支已经合并到主分支,可以使用此命令删除)。git branch -D <branch_name>
:强制删除指定分支(无论是否合并)。
-
合并分支:
git merge <branch_name>
:将指定分支合并到当前分支。
-
重命名分支:
git branch -m <new_branch_name>
:重命名当前所在分支。
-
查看分支合并情况:
git branch --merged
:列出已经合并到当前分支的分支。git branch --no-merged
:列出尚未合并到当前分支的分支。
-
查看每个分支的最后提交:
git branch -v
:显示每个分支的最后一个提交信息。
版本回退(Version Rollback):
-
使用
git log
命令查看提交历史,找到要回退到的目标提交的 commit hash 或者使用相对引用,如 HEAD、HEAD~1 等。 -
使用
git checkout <commit_hash>
命令切换到目标提交,这样你就进入了一个“分离头指针(detached HEAD)”的状态,可以查看和测试该提交的代码。 -
如果确认回退到该提交,可以创建一个新的分支来保留回退提交,使用命令
git checkout -b <new_branch_name>
创建新分支,并在该分支上进行进一步的工作。
Rebase(变基)操作:
-
使用
git checkout
命令切换到需要变基的分支(通常是当前分支)。 -
运行
git rebase <base_branch>
命令,将当前分支的提交应用到<base_branch>
上。这将把当前分支上的提交复制到目标分支上,并将当前分支指向目标分支的最新提交。例如:
git rebase main
将当前分支的提交应用到main
分支上。 -
在 rebase 过程中,可能会出现冲突。需要手动解决冲突,使用
git add
添加解决冲突的文件,然后运行git rebase --continue
继续 rebase 过程。 -
如果需要中止 rebase 操作,可以使用
git rebase --abort
命令来回到变基开始前的状态