网站建设服务收费,j动态加载网站开发,扬州建设工程交易网,营销型网站建设公司易网拓引言
在我之前面试过程中#xff0c;经常会问到关于公司使用什么代码版本管理工具。 无非是考察咱们是否用过 Git和SVN。 现在公司选择的工具直接影响到项目的开发流程和协作效率。当前市面上#xff0c;Git 和 SVN#xff08;Subversion#xff09;是两种流行的版本控制系…引言
在我之前面试过程中经常会问到关于公司使用什么代码版本管理工具。 无非是考察咱们是否用过 Git和SVN。 现在公司选择的工具直接影响到项目的开发流程和协作效率。当前市面上Git 和 SVNSubversion是两种流行的版本控制系统。它们各有优势和适用的场景。 SVN我暂且不说了。一般游戏公司用的比较多 感兴趣的可以自己搜相关文章去了解哈。
本篇文章我将详细讲解我们使用Git版本控制过程中经常遇到的命令以及对应的解释说明。 毕竟很多我自己也没注意。本篇文章即对git 命令做一个总结。
git init创建一个 Git 仓库
在日常开发中第一步通常是创建一个 Git 仓库。在本地开发中我们可以通过 git init 命令初始化一个新的 Git 仓库开始对项目进行版本管理。这个仓库可以是全新的项目也可以是一个已有项目的 Git 管理配置。当然有些开发者不需要自己创建仓库而是直接从公司项目库中拉取分支这部分我们会在后面详细说明。
示例命令
git init运行该命令后Git 会在当前目录下创建一个隐藏的 .git 文件夹存储所有的 Git 配置信息和历史记录。这一步完成后我们就成功创建了一个本地 Git 仓库。
git init 的应用场景
全新项目在从零开始开发项目时可以使用 git init 初始化 Git 仓库以便跟踪每次提交的变更。管理现有项目如果项目已经存在则可以在其根目录下执行 git init开始管理这个项目的版本历史。 git config 配置用户信息
在初始化 Git 仓库后通常需要配置用户的基本信息如用户名和邮箱以确保每次提交都能准确标识代码作者。这一步也帮助团队协作中追踪不同贡献者的代码更改。
配置用户名和邮箱
在使用 Git 前建议为当前环境配置用户名和邮箱以确保提交的作者信息一致。
示例命令
git config --global user.name Your Name
git config --global user.email your.emailexample.com--global--global 参数表示设置为全局配置这些信息适用于当前用户的所有 Git 仓库。 本地仓库配置若只在当前仓库中设置用户名和邮箱可省略 --global 参数 git config user.name Project Specific Name
git config user.email project.emailexample.com查看当前配置
要查看已配置的 Git 信息可以使用以下命令
git config --list此命令将列出所有配置项包括用户名、邮箱和其他 Git 选项。
git config 的其他常用配置 设置默认文本编辑器 git config --global core.editor vim如果不指定编辑器Git 默认调用系统编辑器。可以根据个人习惯设置为 vim、nano、codeVS Code等。 启用颜色显示 git config --global color.ui auto启用颜色显示可以让 Git 命令输出更直观例如 status 和 diff 的结果会使用不同颜色来显示状态差异更便于识别。 设置 Git 命令别名 git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit设置别名可以简化常用命令并提高效率。例如用 git st 代替 git status更简便易用。 配置默认合并策略 git config --global merge.ff false该配置禁止使用快速合并fast-forward从而在合并时保留分支的历史记录方便后续查阅。 设置推送默认分支 git config --global push.default simple此配置确保只推送当前分支到远程仓库中的同名分支减少错误推送其他分支的风险。
配置文件的位置
全局配置文件通常位于用户主目录下的 .gitconfig 文件所有全局设置都记录在其中。项目配置文件每个 Git 仓库也有一个独立的 .git/config 文件用于记录该仓库的特定配置。 git clone从远程仓库克隆项目
在团队开发中开发人员通常不需要从头创建一个项目仓库而是直接从公司项目库或远程仓库中拉取代码。这一步我们使用 git clone 命令来完成。git clone 可以将整个远程仓库复制到本地并保留所有提交历史、分支和标签信息方便开发者快速开始工作。
基本用法
git clone repository-url例如克隆 GitHub 上的一个项目仓库
git clone https://github.com/username/project-name.git执行该命令后Git 会在当前目录下创建一个名为 project-name 的文件夹并将远程仓库的内容下载到该文件夹中。
git clone 的常用参数 指定克隆到的目录 git clone repository-url directory默认情况下Git 会在当前目录下创建一个与仓库名称相同的文件夹。但如果需要自定义文件夹名称可以在 URL 后面指定 git clone https://github.com/username/project-name.git my-local-folder上述命令会将仓库克隆到 my-local-folder 文件夹中。 指定分支克隆 git clone -b branch-name repository-url默认情况下git clone 会克隆默认分支通常是 main 或 master 分支。但可以使用 -b 参数来克隆特定分支 git clone -b develop https://github.com/username/project-name.git这会将远程仓库的 develop 分支克隆到本地。 浅克隆仅获取最近的提交 git clone --depth number repository-url有时仓库的提交历史非常庞大为了节省时间和空间可以使用 --depth 参数进行浅克隆只获取最近的提交。比如 git clone --depth 1 https://github.com/username/project-name.git这会只获取最新的 1 次提交适合快速查看项目或测试代码。 单分支克隆 git clone --single-branch -b branch-name repository-url如果只需要一个特定分支可以同时使用 --single-branch 和 -b 参数这样只会下载该分支的内容而不会包含其他分支信息 git clone --single-branch -b feature https://github.com/username/project-name.git这在需要某个特定功能分支时非常有用可以减少下载的数据量。 使用 SSH 克隆 如果在本地配置了 SSH 密钥可以直接使用 SSH 方式克隆仓库避免每次输入用户名和密码 git clone gitgithub.com:username/project-name.git这种方式更适合团队协作尤其是频繁推送和拉取的情况。
其他常用选项
--mirror完整地克隆远程仓库包括所有的引用refs用于创建仓库的完整镜像。这种模式会把仓库的所有内容包括所有分支、标签等原样复制不创建工作区。--recursive当项目中包含子模块submodules时可以使用此参数同时克隆子模块内容避免手动初始化子模块。
常见示例总结 克隆默认分支到自定义目录 git clone https://github.com/username/project-name.git custom-folder克隆特定分支如 develop 分支 git clone -b develop https://github.com/username/project-name.git仅获取最近 3 次提交 git clone --depth 3 https://github.com/username/project-name.git通过 git clone 命令开发者可以轻松将项目从远程仓库复制到本地快速上手开发。 创建和管理分支
一般来说当我们封装好了 master 主分支代码或者从公司仓库克隆了代码后就需要进入实际开发阶段。在日常开发中我们通常会基于主分支创建新的分支这样可以在不影响主分支的情况下独立完成功能或修复工作之后再将更改合并到主分支中。这一部分我们将介绍常用的分支管理命令。
1. 创建分支git branch branch-name
在 Git 中创建分支的命令是 git branch branch-name此命令用于在当前分支的基础上创建一个新的分支。创建分支后新分支会拥有当前分支的所有提交历史但并不会自动切换到新分支。
示例命令
git branch feature-xyz上述命令会基于当前分支通常是 main 或 master创建一个名为 feature-xyz 的新分支。此分支可以用于特定功能的开发或 Bug 修复确保开发工作不会影响到主分支。
2. 创建并切换到新分支git checkout -b branch-name
要创建分支并自动切换到该分支可以使用 git checkout -b 命令这是一种快捷方式非常适合在创建分支后直接进入开发状态。
示例命令
git checkout -b feature-xyz执行该命令后Git 会创建 feature-xyz 分支并切换到该分支。这样我们就可以在新分支上直接进行开发而不影响到其他分支。
3. 查看所有分支git branch
在 Git 中我们可以通过 git branch 命令查看本地所有分支的列表当前分支会带有 * 标记表示开发者目前所在的分支。
示例命令
git branch输出示例
* masterfeature-xyzbugfix-123这里 * master 表示当前处于 master 分支。
4. 删除分支git branch -d branch-name
完成开发任务或 Bug 修复后如果不再需要某个分支可以使用 git branch -d 命令删除本地的分支。此命令会确保分支上的内容已经被合并否则不会允许删除分支以防丢失未合并的提交。
示例命令
git branch -d feature-xyz如果要强制删除未合并的分支可以使用 -D 参数不推荐除非确定不再需要分支内容
git branch -D feature-xyz5. 推送分支到远程仓库git push origin branch-name
在本地完成分支的开发后通常需要将其推送到远程仓库方便团队协作。使用 git push origin branch-name 命令即可将当前分支推送到远程。
示例命令
git push origin feature-xyz此命令会将 feature-xyz 分支推送到远程仓库。如果是第一次推送可以加上 -u 参数将当前分支和远程分支关联简化后续操作
git push -u origin feature-xyz之后只需运行 git push 即可更新远程分支。
6. 查看远程分支git branch -a
使用 git branch -a 可以查看所有分支包括本地和远程的所有分支。通常远程分支前面会带有 remotes/origin/ 前缀
git branch -a示例输出
* masterfeature-xyzremotes/origin/masterremotes/origin/feature-xyz7. 删除远程分支
若需要从远程仓库删除一个分支可以使用以下命令
git push origin --delete feature-xyz此命令会从远程仓库中移除 feature-xyz 分支但不会影响到其他人的本地分支。
以上是 Git 中常见的分支管理操作。分支管理可以有效帮助开发人员在不同功能间切换、隔离未完成的更改确保项目主分支始终保持稳定。 提交管理
在开发中完成了功能或修复后我们需要将更改提交到 Git 仓库中。提交管理包括将文件从工作区添加到暂存区、编写提交信息以及查看和管理提交历史等。以下介绍了常用的提交管理命令及其用法、示例和撤销操作的处理方法。
1. 添加文件到暂存区git add
git add 命令用于将工作区中的文件添加到暂存区为后续的提交做准备。可以选择性地添加特定文件或目录也可以一次性添加所有更改。
示例命令 添加单个文件 git add filename.txt添加当前目录的所有文件和更改包括新文件和修改 git add .添加所有文件包括已删除的文件 git add -A交互式添加代码片段选择性提交文件中的部分更改 git add -p2. 提交更改git commit
git commit 命令用于将暂存区的更改提交到本地仓库生成新的提交记录并附带一条提交信息描述更改内容。提交信息应该清晰、简洁帮助团队理解更改内容。
示例命令 使用简洁的提交信息提交 git commit -m Add feature XYZ如果提交后发现需要补充更改或修改提交信息可以使用 --amend 参数来修改上一次提交 git commit --amend该命令会打开编辑器允许更改提交信息或加入新的更改不会生成新的提交记录而是覆盖上一次提交。
3. 查看工作区状态git status
git status 命令用于查看工作区和暂存区的状态包括哪些文件已被修改、哪些文件在暂存区、哪些文件未被跟踪。提交前通过 git status 检查更改有助于确保提交内容正确。
示例命令
git status输出示例
On branch feature-xyz
Changes to be committed:(use git restore --staged file... to unstage)modified: filename.txtnew file: newfile.txtChanges 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: anotherfile.txt4. 查看提交历史git log
git log 用于查看提交历史包含提交人、提交信息和提交时间等信息。在需要回溯更改或审查历史提交时git log 是非常有用的命令。
示例命令 查看所有提交历史 git log简化显示按单行输出每个提交 git log --oneline以图形化方式显示提交历史展示分支和合并情况 git log --graph --oneline --all示例输出
* 9b0f5a2 Add feature XYZ
* 2f6e45d Fix bug in function ABC
* 7c8e4e1 Initial project setup5. 查看差异git diff
git diff 用于查看工作区或暂存区中的差异帮助确认修改内容。
示例命令 查看工作区的更改 git diff查看暂存区与工作区的差异显示已暂存的修改 git diff --cached比较两个分支之间的差异 git diff branch1 branch2查看特定提交之间的差异 git diff commit-hash1 commit-hash2撤销操作
在提交后可能会遇到需要撤销或修改提交内容的情况。以下是常用的撤销操作命令及示例。
6. 取消暂存git restore --staged file
如果已将文件添加到暂存区但不想包含在下一次提交中可以使用 git restore --staged 命令取消暂存。
示例命令
git restore --staged filename.txt此命令将文件移出暂存区但保留工作区中的更改。
7. 撤销上一次提交git commit --amend
若在提交后发现需要补充修改或更改提交信息可以使用 git commit --amend 命令修改上一次提交而不会生成新的提交。
示例命令
git commit --amend执行此命令后Git 会打开编辑器可以修改提交信息或将新的更改加入到上次提交中。
8. 回退到特定提交git reset
git reset 用于回退到指定的提交根据参数不同回退可以保留或删除更改。 软回退保留工作区和暂存区更改 git reset --soft commit-hash混合回退保留工作区更改但清除暂存区 git reset --mixed commit-hash硬回退彻底丢弃所有更改 git reset --hard commit-hash例如回退到特定提交并保留工作区内容
git reset --soft 9b0f5a29. 撤销特定提交git revert
git revert 创建一个新的提交来撤销指定提交不会更改提交历史适用于已推送到远程仓库的情况。
示例命令
git revert 9b0f5a2此命令会生成一个新的提交来撤销 9b0f5a2 的更改而不会修改历史记录。
10. 丢弃工作区的更改git restore file
如果工作区的文件修改不再需要可以用 git restore 丢弃更改恢复到最后一次提交的状态。
示例命令 丢弃指定文件的更改 git restore filename.txt丢弃整个目录的修改 git restore .通过以上提交管理和撤销操作的命令开发者可以有效地管理提交记录确保提交内容的正确性。合理使用这些命令有助于保持 Git 提交历史的整洁与一致。 合并和撤销操作管理
在 Git 的使用过程中合并和撤销操作是团队协作开发中的重要步骤。功能开发完成后通常需要合并到主分支而在出现错误时可能需要回退或撤销合并操作。Git 提供了多种命令来满足不同的合并和撤销需求以下是主要的合并和撤销命令及其适用场景。 合并操作
1. 合并分支git merge
git merge 命令用于将一个分支的所有提交合并到当前分支。通常在功能开发完成后用于合并整个分支的更改是最常用的合并方法。
示例命令 首先切换到主分支 git checkout main将 feature-branch 分支合并到 main git merge feature-branch合并模式
快速合并Fast-Forward 如果主分支上没有其他提交Git 会直接移动分支指针不生成新的合并提交。三方合并Three-Way Merge 如果主分支上有其他提交则会生成一个合并提交包含合并前的所有历史。
2. 选择性合并git cherry-pick
git cherry-pick 命令用于将指定的单个或多个提交合并到当前分支适合在功能未完全完成或部分更改已验证的情况下选择性地合并到主分支。
示例命令 切换到主分支 git checkout main将 feature-branch 中的特定提交 abc1234 应用到 main git cherry-pick abc1234多个提交的 cherry-pick 使用提交区间来选择合并一系列提交 git cherry-pick abc1234^..xyz5678撤销合并操作
在合并操作后如果发现问题或不想保留某些更改Git 提供了 git reset 和 git revert 命令来撤销合并。
3. 撤销提交历史git reset
git reset 用于回退到指定的提交适合在本地开发中重写提交历史。如果合并提交未推送到远程仓库可以使用 reset 来回退合并。
适用场景git reset 会直接删除指定提交及其之后的历史因此适合本地分支回退后可以重新调整提交内容。
4. 撤销已提交的合并git revert
git revert 不会直接更改提交历史而是通过创建一个新的提交来抵消指定提交的内容。这非常适合在已推送到远程仓库的分支上撤销合并确保历史记录完整。
示例命令 撤销合并提交例如 merge-commit-hash 是合并的提交哈希 git revert -m 1 merge-commit-hash这里的 -m 1 表示指定主分支main 或 master为合并基础帮助 Git 识别要撤销的内容。
适用场景git revert 非常适合在远程分支上操作不会改变历史记录适合团队协作和远程分支的操作。 合并与撤销的选择
完整合并分支git merge 是合并功能分支的最佳选择能完整保留分支历史适合已完成的功能或 Bug 修复。选择性合并提交git cherry-pick 适合在部分更改已验证的情况下将特定提交合并到主分支。撤销本地合并操作git reset 用于撤销本地的合并直接修改提交历史适合未推送的提交。撤销远程合并操作git revert 用于在远程仓库中撤销合并提交不更改历史记录确保协作稳定。 同步远程仓库
在团队开发中为了保持代码的同步性和一致性常常需要将本地分支与远程仓库进行同步。同步远程仓库前通常需要先更新本地分支获取最新的远程分支信息以确保合并或提交时不会出现冲突。同步的核心命令包括 git fetch、git pull 和 git push。
1. 更新远程仓库信息git fetch
git fetch 命令用于从远程仓库获取更新信息但不会自动合并到当前分支。git fetch 更新了本地的远程分支信息可以帮助我们了解远程仓库的最新状态然后选择是否进行合并。
示例命令
git fetch origin此命令会从远程仓库 origin 拉取更新但不会影响当前分支。
常用参数 指定分支只拉取某个分支的更新信息 git fetch origin main拉取所有远程分支 git fetch --all适用场景在提交或推送之前通过 git fetch 先检查远程仓库是否有更新然后再选择是否合并这些更新有助于避免冲突。
2. 拉取并合并远程分支git pull
git pull 是 git fetch 和 git merge 的组合。它先拉取远程更新然后自动合并到当前分支。使用 git pull 可以快速同步远程分支的最新内容但如果远程有冲突可能需要手动解决。
示例命令 基本拉取并合并当前分支的更新 git pull origin main此命令会从远程仓库 origin 中的 main 分支拉取更新并自动合并到本地的 main 分支。 --rebase 参数拉取远程更改并使用 rebase 合并避免产生合并提交使提交历史更加线性整洁 git pull --rebase origin main适用场景当需要立即同步远程仓库的最新更新时使用 git pull 可以一键完成拉取并合并的过程。不过在多人协作时建议在拉取之前先使用 git fetch 查看变动再决定是否需要手动合并以避免自动合并产生的冲突。
3. 推送本地更改到远程仓库git push
git push 用于将本地分支的更改推送到远程仓库便于其他开发者获取。通常在提交、拉取并解决冲突后使用 git push 将更改同步到远程仓库。第一次推送时需指定远程分支名称之后可以简化为 git push。
示例命令 将当前分支的更改推送到远程仓库的对应分支 git push origin main-u 参数指定默认远程跟踪分支设置后可以直接使用 git push 推送不再需要每次指定远程分支。 git push -u origin main强制推送当推送被拒绝时可以使用 --force 强制推送本地内容覆盖远程分支慎用可能会覆盖其他开发者的内容 git push --force origin main适用场景当本地开发完成并提交后使用 git push 将更改同步到远程仓库确保团队成员能够获取到最新代码。在多人协作时不推荐使用 --force 推送避免破坏他人工作。
示例操作流程
在实际的团队协作中通常的同步流程如下 更新远程分支信息在同步之前先运行 git fetch 拉取远程仓库的更新了解远程分支的最新状态。 git fetch origin拉取并合并远程更新如果发现远程分支有更新需要合并到当前分支可以使用 git pull 合并更新。 git pull origin main推送本地更改到远程当本地开发完成并解决冲突后使用 git push 将更改推送到远程分支。 git push origin main小结
git fetch获取远程更新不影响本地分支适合在合并前查看远程变更。git pull获取并自动合并远程更新适合需要立即同步更新的场景。git push将本地更改推送到远程仓库适合完成开发后同步代码给团队成员。 解决冲突和提交
在团队协作或多分支开发中代码合并时经常会遇到冲突。Git 冲突通常发生在不同分支对同一文件的同一区域进行了不同修改时。了解如何查看、解决冲突以及提交修改是团队开发中至关重要的技能。
1. 什么是冲突
冲突发生在 Git 无法自动合并不同分支的更改时例如两人都修改了同一行代码。遇到冲突时Git 会停止合并过程并标记冲突的文件。开发者需要手动解决这些冲突然后继续完成合并。
冲突的常见场景
拉取远程更改执行 git pull 合并远程更改时本地的修改和远程的修改产生冲突。合并分支将功能分支合并到主分支时如果两个分支对同一文件的相同位置进行了不同更改可能会产生冲突。
2. 查看冲突
当冲突发生时Git 会将冲突文件标记为未合并状态。可以通过以下命令查看冲突文件的状态
git status冲突标记示例
Git 会在冲突的文件中生成类似以下的标记 HEAD
// 当前分支的代码
// 被合并分支的代码feature-branchHEAD 表示当前分支的代码。 是冲突的分界线。 feature-branch 表示被合并分支的代码。
3. 解决冲突
解决冲突时需要手动编辑冲突文件选择保留的更改或者合并两边的代码。可以按以下步骤进行 编辑冲突文件打开冲突的文件找到冲突标记 (、 和 ) 位置手动选择保留或删除冲突代码块。 示例合并两个冲突的版本手动选择适当的代码然后删除冲突标记。 // 解决冲突后
// 保留的合并代码添加解决后的文件解决冲突后将文件添加到暂存区标记为已解决。 git add conflicted-file完成合并提交在所有冲突解决并添加到暂存区后执行以下命令完成合并。 git commit4. 查看并处理多个冲突
在大型项目中多个文件可能会产生冲突。可以通过以下命令逐步查看并处理冲突 查看所有冲突文件 git status添加已解决的所有文件 git add .完成合并并提交 git commit -m Resolve merge conflicts5. 使用工具解决冲突
Git 兼容多种 GUI 工具可以帮助可视化解决冲突。可以使用 VS Code、Sourcetree、P4Merge 等工具直接查看并解决冲突更加直观。
设置默认冲突解决工具
git config --global merge.tool tool-name例如
git config --global merge.tool vscode然后执行以下命令启动工具解决冲突
git mergetool6. 提交解决后的代码
在解决冲突后可以使用 git commit 提交已合并的更改。以下是常见的提交流程 解决冲突并保存更改确保所有冲突文件已保存。 将解决的文件添加到暂存区 git add .提交合并更改 git commit -m Resolve merge conflicts and merge branch小结
冲突解决流程在合并冲突发生时先用 git status 查看冲突文件手动编辑或使用工具解决冲突然后通过 git add 和 git commit 完成合并。工具辅助可以设置并使用合并工具如 VS Code 或其他合并工具更高效地可视化解决冲突。
通过熟练掌握冲突解决和提交方法团队开发中能够更快速地整合分支和解决代码冲突确保项目稳定。 暂存和恢复工作区
在实际开发中有时我们正在修改代码但需要临时切换到其他任务或分支这时可以使用 git stash 来保存当前的未提交更改将工作区恢复到干净状态方便切换工作。git stash 系列命令允许我们将未完成的更改暂存起来并在需要时恢复。
使用场景
以下是使用 git stash 的典型场景
临时切换分支如果在某个分支上修改了代码但还未完成或提交而此时需要切换到其他分支可以将更改暂存起来避免影响切换操作。测试其他功能正在开发某个功能但需要临时测试或修复其他功能的代码可以将当前的工作暂存。清理工作区如果需要清理工作区的修改内容但又不想丢失更改可以使用 git stash 来保存当前状态。
1. 保存当前工作区更改git stash
git stash 命令用于将当前工作区的所有更改包括未提交的文件存入 Git 的暂存栈中然后将工作区恢复到上一次提交的状态。执行 git stash 后工作区将变为干净状态便于进行其他操作。
示例命令
git stash执行此命令后所有未提交的更改会被暂存到一个栈中工作区恢复为最新提交的状态。
常用参数 保存特定消息可以添加备注方便后续识别暂存内容 git stash push -m WIP: feature A development仅暂存未提交的文件 git stash --keep-index2. 查看暂存的更改列表git stash list
git stash list 命令用于查看当前仓库的所有暂存记录。每条记录都有唯一的编号和备注如果有。
示例命令
git stash list示例输出
stash{0}: WIP on main: 9b0f5a2 Add feature XYZ
stash{1}: WIP on main: 7c8e4e1 Bugfix for ABC function这里 stash{0} 是最近一次的暂存内容记录了暂存的分支名称和最近的提交信息。
3. 恢复暂存的更改git stash pop
git stash pop 命令用于从暂存栈中恢复最近一次暂存的更改并从暂存栈中删除该记录。执行此命令后暂存内容会被还原到工作区。
示例命令
git stash pop执行该命令后工作区会恢复到最近一次的暂存状态并删除该暂存记录。
###3 4. 应用暂存的更改但不删除git stash apply
git stash apply 命令会将指定的暂存内容应用到工作区但不会删除该暂存记录。如果需要多次使用某个暂存记录可以使用 apply 而不是 pop。
示例命令 恢复最近一次暂存的内容不删除 git stash apply恢复特定的暂存记录不删除 git stash apply stash{1}5. 删除特定的暂存记录git stash drop
git stash drop 命令用于删除指定的暂存记录帮助保持暂存栈的整洁。
示例命令
git stash drop stash{1}此命令会删除 stash{1} 的暂存内容但不会影响工作区。
6. 清除所有暂存记录git stash clear
git stash clear 会清空所有的暂存记录不可恢复。谨慎使用。
示例命令
git stash clear示例操作流程 将当前工作区的修改暂存 git stash push -m WIP: Refactoring feature B切换到其他分支进行任务处理 git checkout main完成任务后切回原分支并恢复暂存的更改 git stash pop查看暂存历史删除不需要的暂存记录 git stash list
git stash drop stash{1}小结
git stash暂存当前工作区更改用于临时保存修改。git stash list查看暂存的更改记录。git stash pop恢复最近一次暂存内容并删除记录。git stash apply恢复指定暂存内容但不删除记录。git stash drop / git stash clear删除单个或全部暂存记录保持暂存栈整洁。
使用 git stash 系列命令开发者可以灵活地在不同任务之间切换同时保持未完成的工作不被丢失。 查看和比较命令
在使用 Git 时经常需要查看提交的详细信息、对比不同分支的差异以及查看提交历史等。Git 提供了多种查看和比较命令包括 git show、git diff 和 git log帮助开发者更好地理解代码变更和项目进展。
1. 查看提交详情git show
git show 命令用于查看某次提交的详细信息包含提交人、提交时间、提交信息以及具体的代码变更。它默认显示最新的提交内容也可以指定提交哈希查看特定提交的详细信息。
基本用法
git show此命令会展示最新一次提交的详细内容。
指定提交
git show commit-hash常用参数 --name-only仅显示提交中修改的文件列表。 git show --name-only commit-hash--stat显示提交的统计信息每个文件的增加和删除行数。 git show --stat commit-hash示例
git show 9b0f5a2输出内容包括提交的摘要信息和具体的代码差异。git show 是查看单个提交内容的最佳工具适合快速了解每次提交的变动。
2. 查看差异git diff
git diff 用于查看工作区或暂存区与最后一次提交之间的差异也可以用来比较两个分支、两个提交之间的差异。git diff 是开发者查看代码变动的重要工具尤其在提交前检查更改是否符合预期。
基本用法 查看工作区的更改相对于上一次提交的差异 git diff查看暂存区与上次提交的差异 git diff --cached查看工作区与暂存区的差异 git diff HEAD比较不同分支或提交 比较两个分支 git diff branch1 branch2比较两个提交 git diff commit1 commit2常用参数 --name-only只显示差异的文件列表不显示具体代码。 git diff --name-only--stat显示差异的统计信息修改的文件、增加和删除的行数。 git diff --stat示例 查看当前工作区和上次提交的差异 git diff比较两个提交之间的差异 git diff abc1234 xyz56783. 查看提交历史git log
git log 用于查看提交历史帮助开发者回顾项目的变更记录。git log 会列出从最近到最早的所有提交记录每条记录包含提交哈希、提交人、提交时间和提交信息。
基本用法
git log常用参数 --oneline每次提交仅显示一行简化显示内容。 git log --oneline--graph以图形方式展示分支和合并情况方便查看分支的演变。 git log --graph--all显示所有分支的提交历史包括远程分支。 git log --all组合参数--graph --oneline --all 组合使用以图形方式展示所有分支的历史记录。 git log --graph --oneline --all-p显示每次提交的具体代码差异。 git log -p--stat显示每次提交的文件修改统计。 git log --stat示例 查看简化的提交历史 git log --oneline图形方式查看提交历史 git log --graph --oneline --all查看特定文件的提交历史 git log -- filename.txt示例操作流程 查看最近一次提交的详细信息 git show检查本地修改与上次提交的差异 git diff查看项目提交历史图形化展示分支和合并情况 git log --graph --oneline --all小结
git show查看某次提交的详细内容适合查看单个提交的代码变更。git diff比较不同提交或分支的代码差异适合提交前检查代码变动。git log查看提交历史帮助追踪项目的历史记录和分支合并情况。 标签管理
在 Git 中标签Tag是一种特殊的标记用于标识特定的提交版本。标签通常用于为代码的关键版本如发布版、里程碑创建一个永久的记录。标签可以帮助开发者快速找到项目的某个重要版本便于回溯或重新部署。Git 中的标签有轻量标签Lightweight和注释标签Annotated两种。
什么时候需要打标签
标签通常用于以下场景
版本发布在发布一个新版本时可以在主分支上打上标签以方便后续查找和回溯。里程碑当项目达到某个重要的进展阶段如完成某个重大功能时可以打标签记录当前版本。回溯参考为特定的修复点或优化点打标签便于后续对比和参考。
1. 创建标签git tag tag-name
创建标签的命令是 git tag默认会创建一个轻量标签Lightweight Tag直接将标签指向当前的提交记录。标签名应具有标识性通常以版本号格式命名如 v1.0、v2.1.3。
示例命令 创建轻量标签 git tag v1.0创建带注释的标签推荐注释标签包含标签的创建者、日期和说明信息。 git tag -a v1.0 -m Release version 1.0指定某个提交创建标签 git tag v1.0 commit-hash注推荐使用带注释的标签 -a因为注释标签包含更多信息便于日后查阅。
2. 推送标签到远程仓库git push origin tag-name
本地创建的标签不会自动推送到远程仓库。若希望与团队共享某个标签可以将标签推送到远程仓库。
示例命令 推送单个标签 git push origin v1.0推送所有标签 git push --tags适用场景在发布新版本或重要里程碑时将标签推送到远程仓库方便团队成员查看和使用。
3. 删除标签
有时可能会需要删除不再使用或错误的标签。Git 支持在本地和远程仓库分别删除标签。 删除本地标签使用 git tag -d 删除本地标签记录。 示例命令 git tag -d v1.0删除远程标签远程标签需要通过推送空标签来删除。 示例命令 git push origin :refs/tags/v1.0注意在多人协作项目中删除远程标签需谨慎避免删除关键版本标记。
示例操作流程 在发布新版本时创建带注释的标签 git tag -a v1.1 -m Release version 1.1 with new features将标签推送到远程仓库以便团队成员查阅 git push origin v1.1查看所有标签 git tag删除错误的本地标签 git tag -d v1.1删除远程标签 git push origin :refs/tags/v1.1小结
git tag tag-name 创建标签用于标记关键版本。git tag -a tag-name -m message 创建带注释的标签推荐用于版本管理。git push origin tag-name 将标签推送到远程仓库便于团队共享。git tag -d tag-name 和 git push origin :refs/tags/tag-name 分别删除本地和远程标签。 总结
Git 提供了灵活的版本控制功能通过分支管理、提交历史查看、合并与冲突解决、标签管理等命令开发者可以轻松在团队中协作、跟踪代码变更并快速发布新版本。掌握 Git 的核心命令和工作流程能够提升代码管理效率保证项目的稳定和可追溯性。
Git 命令速查表
操作命令说明初始化仓库git init初始化一个新的 Git 仓库克隆仓库git clone repository-url克隆现有的远程仓库到本地配置用户信息git config --global user.name Your Name git config --global user.email your.emailexample.com设置全局用户名和邮箱创建分支git branch branch-name创建一个新的分支切换分支git checkout branch-name切换到指定分支创建并切换分支git checkout -b branch-name创建并切换到新的分支查看分支git branch -a查看所有分支包括远程分支添加文件到暂存区git add file将文件添加到暂存区查看暂存状态git status查看工作区和暂存区状态提交更改git commit -m message提交暂存区的更改修改最近的提交git commit --amend修改上一次提交合并分支git merge branch-name合并指定分支到当前分支选择性合并提交git cherry-pick commit-hash将特定提交应用到当前分支查看提交历史git log查看完整的提交历史简洁查看提交历史git log --oneline --graph --all简化和图形化显示所有分支的提交历史查看单个提交git show commit-hash查看特定提交的详细信息查看差异git diff查看工作区和暂存区的差异比较两个分支git diff branch1 branch2比较两个分支之间的差异创建标签git tag tag-name创建轻量标签创建注释标签git tag -a tag-name -m message创建带注释的标签包含更多信息推送标签git push origin tag-name推送指定标签到远程仓库推送所有标签git push --tags推送本地的所有标签到远程仓库删除本地标签git tag -d tag-name删除本地标签删除远程标签git push origin :refs/tags/tag-name删除远程仓库中的标签保存更改到暂存区git stash将当前工作区的修改暂存查看暂存列表git stash list查看所有暂存的更改记录恢复最近的暂存git stash pop恢复并删除最近的暂存更改恢复指定暂存git stash apply stash{index}应用指定的暂存更改但不删除推送分支到远程git push origin branch-name将当前分支推送到远程仓库拉取并合并远程更新git pull获取远程更改并合并到当前分支仅获取远程更新git fetch从远程仓库获取更新不合并到当前分支撤销提交历史git reset --soft commit-hash git reset --mixed commit-hash git reset --hard commit-hash回退到指定提交保留更改或丢弃所有更改回滚指定提交git revert commit-hash创建一个新的提交来撤销指定提交 资源链接和进一步学习
Git 官方文档Git DocumentationGitHub 官方教程GitHub GuidesPro Git免费电子书 Pro Git Book
上面就是本篇文章总结的有关工作中常用到的Git 相关操作命令 虽然现在我们开发大多数都是适用开发软件进行Git操作的 但是基本的Git命令还是要了解的。面试问的一般会比较多哈。