Git 是一个功能强大的版本控制工具,提供了许多常用的操作来帮助开发者管理代码。以下是一些常见的 Git 操作及其用法:
-
Git 配置
配置用户信息
首次使用 Git 时,设置全局用户信息(用户名和邮箱):
git config --global user.name "Your Name" git config --global user.email "youremail@example.com"
-
初始化仓库
初始化一个新的 Git 仓库
在一个项目文件夹中初始化一个 Git 仓库:
git init
-
克隆仓库
克隆远程仓库
将一个远程仓库克隆到本地:
git clone <repository_url>
例如:
git clone https://github.com/user/repository.git
-
查看仓库状态
查看工作区状态
查看当前工作区和暂存区的状态,了解哪些文件已修改或新增,哪些文件已暂存:
git status
-
文件操作
添加文件到暂存区
将修改过的文件添加到暂存区,准备提交:
git add <file_name> # 或者添加所有文件 git add .
提交更改
将暂存区的更改提交到本地仓库,并添加提交信息:
git commit -m "Commit message"
-
没有输入
message
,直接点击提交
按钮遇到如下内容时,表明 Git 进入了一个提交消息编辑状态,并且你需要输入提交消息。这里的信息是 Git 自动生成的编辑提示,行以
#
开头的是注释内容,不会影响提交。你需要在其中删除注释,并输入你的提交信息。步骤
-
输入提交消息:在这个界面中,你应该在顶部的空白区域输入你的提交消息。例如:
Fix bug in store index.js
-
保存并退出编辑器:
- 如果你在 VSCode 中,应该在编辑器中看到一个文本文件,输入完提交信息后,按
Ctrl + S
(或Cmd + S
如果你在 macOS 上)保存文件。 - 然后,关闭编辑器窗口,Git 会自动使用该消息进行提交。
- 如果你在 VSCode 中,应该在编辑器中看到一个文本文件,输入完提交信息后,按
-
如果提交信息为空:如果你没有输入任何信息,或者编辑窗口被关闭且没有任何提交消息,Git 会中止提交并显示一个错误提示,要求你输入有效的提交信息。
也可以使用 Git 的命令行参数
-m
来直接提供提交信息,例如:git commit -m "Fix bug in store index.js"
这样,Git 会跳过编辑器,直接提交并使用提供的消息。
-
-
命令行输入
git add .
后,git commit
中没有添加信息,终端进入如下内容:# Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # On branch main # Your branch is up to date with 'origin/main'. # # Changes to be committed: # modified: src/store/index.js #
步骤:
- 可以按下
i
键进入输入模式 - 输入编辑信息
- 编辑完成后按下
esc
键,输入:wq
保存并退出
- 可以按下
-
-
查看提交历史
查看提交日志
查看提交历史记录,显示所有提交的详细信息:
git log
常用的
git log
选项:git log --oneline
:简洁模式,每个提交仅显示一行。git log --graph
:图形化显示提交历史。git log --author="Author Name"
:查看某个作者的提交。
-
分支操作
查看所有分支
查看当前仓库中的所有分支:
git branch
创建新分支
在当前分支的基础上创建一个新分支并切换到该分支:
git checkout -b <branch_name>
切换分支
切换到已有的分支:
git checkout <branch_name>
删除分支
删除本地分支(仅删除分支,不删除工作区的文件):
git branch -d <branch_name>
合并分支
将一个分支合并到当前分支:
git merge <branch_name>
-
远程仓库操作
查看远程仓库
查看当前配置的远程仓库:
git remote -v
添加远程仓库
添加一个新的远程仓库(如 GitHub):
git remote add origin <repository_url>
推送更改到远程仓库
将本地分支的更改推送到远程仓库:
git push origin <branch_name>
从远程仓库拉取更新
从远程仓库拉取最新的代码并与本地合并:
git pull origin <branch_name>
克隆远程仓库
将远程仓库克隆到本地:
git clone <repository_url>
删除远程分支
删除远程仓库上的分支:
git push origin --delete <branch_name>
-
撤销操作
撤销修改(未暂存的)
撤销工作区中的未暂存修改:
git checkout -- <file_name> // 旧的命令,但仍然可以使用 git restore -- <file> // 较新的 Git 命令,推荐使用该命令,因为它更具语义性 // 例如:修改了 vue-demo/src/store/index.js 文件 // 撤销工作区中的未暂存修改:git restore src/store/index.js 当前终端是在vue-demo文件夹下
撤销已经暂存但未提交的修改
将文件从暂存区移除,但保持工作区的修改:
git reset <file_name>
撤销本地已提交,但未同送到远端(Outgoing:当前本地分支上有待推送的提交,即本地提交但还未推送到远程仓库的提交)
撤销最近一次提交(保留文件更改)
-
撤销最近一次提交,并保留文件更改(放回暂存区):
git reset --soft HEAD~1
- 这个命令会撤销最近一次提交(
HEAD~1
),并将修改回到暂存区(也就是放回git add
状态)。你可以再次修改这些文件,或者重新提交。
- 这个命令会撤销最近一次提交(
-
撤销最近一次提交,并将修改放回工作区(不放回暂存区):
git reset --mixed HEAD~1
- 这个命令不仅撤销了提交,还会将修改回到工作区,但不保留暂存区的状态。即文件会被修改为未暂存的状态(
git status
会显示“Changes not staged for commit”)。
- 这个命令不仅撤销了提交,还会将修改回到工作区,但不保留暂存区的状态。即文件会被修改为未暂存的状态(
-
完全撤销最近一次提交(删除提交的修改):
git reset --hard HEAD~1
- 这个命令会撤销提交并丢弃所有相关的修改,包括暂存区和工作区的文件变动。警告:使用
--hard
会丢失所有的本地更改,请确保你不再需要这些修改。
- 这个命令会撤销提交并丢弃所有相关的修改,包括暂存区和工作区的文件变动。警告:使用
各个选项的作用:
--soft
:只撤销提交,保留文件更改,并将更改放回暂存区。--mixed
:撤销提交,并将更改放回工作区,不保留暂存区的状态。--hard
:撤销提交并丢弃所有文件更改(工作区和暂存区)。
注意:
HEAD~1
表示你要撤销的是最近一次提交。如果你要撤销多个提交,可以使用HEAD~n
(例如,HEAD~2
表示撤销最近的两次提交)。- 如果已经推送到远端仓库,撤销提交时需要额外小心,避免影响远端仓库的历史。
-
-
标签操作
创建标签
在当前提交上创建一个标签:
git tag <tag_name>
推送标签
将本地标签推送到远程仓库:
git push origin <tag_name>
查看标签
查看当前仓库中的所有标签:
git tag
删除标签
删除本地标签:
git tag -d <tag_name>
删除远程标签:
git push origin --delete <tag_name>
-
查看和管理冲突
查看文件冲突
如果在合并或拉取时发生冲突,Git 会标记冲突文件,你可以通过
git status
查看冲突文件,并手动解决冲突。标记冲突已解决
解决冲突后,添加冲突解决后的文件到暂存区:
git add <file_name>
-
其他常用操作
查看当前 Git 配置信息
查看本地、全局和系统级别的 Git 配置:
git config --list
退出 Git 编辑器
如果在编辑 commit 信息时想退出编辑器,可以使用以下命令:
- 在
vi
或vim
中按下:wq
保存并退出。 - 在
nano
中按下Ctrl + X
,然后选择Y
保存。
查找文件内容
在仓库中查找特定内容:
git grep "search_term"
- 在
样例
-
将仓库1的dev1分支合并到仓库2的dev2分支
// 要将 仓库1 的 dev1 分支合并到 仓库2 的 dev2 分支,可以按照以下步骤进行操作。请注意,Git 本身是针对单个仓库进行管理的,因此需要将 仓库1 的内容拉取到 仓库2 中,然后执行合并操作。 // 1.在仓库2中添加仓库1为远程仓库 // 首先,在 仓库2 中添加 仓库1 作为远程仓库,这样才能从 仓库1 拉取 dev1 分支的代码。 # 在仓库2中,添加仓库1作为远程仓库 git remote add repo1 <仓库1的URL> // 例如,如果 仓库1 是 GitHub 上的一个仓库,URL 可能是类似这样的: // git remote add repo1 https://github.com/user/repository1.git // 2.拉取仓库1的dev1分支 // 拉取 仓库1 中的 dev1 分支到本地,并将其跟踪为一个远程分支。 # 拉取仓库1的dev1分支 git fetch repo1 dev1 // 3.切换到仓库2的dev2分支 // 确保当前所在分支是 仓库2 的 dev2 分支。 # 切换到仓库2的dev2分支 git checkout dev2 // 4.将dev1分支合并到dev2分支 // 将 仓库1 的 dev1 分支合并到 仓库2 的 dev2 分支。 # 将仓库1的dev1分支合并到仓库2的dev2分支 git merge repo1/dev1 // 在此过程中,可能会遇到冲突,Git 会提示你进行冲突解决。解决冲突后,继续进行合并操作。 // 5. 提交合并结果 // 如果合并过程中没有冲突或冲突已解决,那么就可以提交合并结果。 # 如果有冲突,解决冲突后使用git add标记为已解决 git add <冲突文件> # 提交合并结果 git commit -m "Merge dev1 branch from repository1 into dev2" // 6. 推送合并后的代码到仓库2的远程仓库 // 合并完成后,你可以将 dev2 分支的最新代码推送到 仓库2 的远程仓库。 # 将仓库2的dev2分支推送到远程仓库 git push origin dev2