一、速查表格
命令作用git add <文件名>
将文件添加到暂存区,可以使用 . 将所有修改的文件添加git commit -m “提交信息”将暂存区的文件提交到本地堆栈git branch -d <分支名>
删除本地分支,使用 -D 逼迫删除git switch -c <新分支名基于当前分支创建新分支并切换git stash
暂时保存当前未提交的更改git stash
pop将暂存的更改恢复到工作目录git fetch从长途堆栈获取最新的提交、分支和标签信息git merge dev将dev分支归并到当前分支git rm -r --cached <文件夹路径>将指定文件夹从 Git 跟踪中删除,但保留本地文件夹git push origin <分支名>
推送代码到长途堆栈git push origin --delete <分支名>删除长途堆栈指定分支 二、常见利用
以下是一些常见的 Git 利用及其用途:
1. 配置 Git 用户信息
- git config --global user.name "你的名字"
- git config --global user.email "你的邮箱"
复制代码 2. 初始化堆栈
在当前目录下初始化一个新的 Git 堆栈。
3. 克隆堆栈
从长途堆栈克隆一个项目到本地。
4. 查看当前状态
显示工作目录和暂存区的状态,查看哪些文件被修改或准备提交。
5. 添加文件到暂存区
将文件添加到暂存区,可以使用 . 将所有修改的文件添加。
6. 提交更改
将暂存区的文件提交到本地堆栈。
7. 查看提交记载
显示提交汗青,git log
--oneline 简化输出。
8. 创建分支
创建一个新的分支。
9. 切换分支
切换到指定分支。
10. 归并分支
将指定分支的更改归并到当前分支。
11. 删除分支
删除本地分支,使用 -D 逼迫删除。
12. 推送代码到长途堆栈
将本地分支的更改推送到长途堆栈。
13. 拉取长途堆栈的更改
获取并归并长途堆栈的更改。
14. 克隆特定分支
- git clone -b <分支名> <仓库地址>
复制代码 克隆长途堆栈中特定的分支。
15. 创建并切换到新分支
创建并直接切换到新的分支。
16. 暂存更改(stash)
暂时保存当前未提交的更改。
17. 恢复暂存的更改
将暂存的更改恢复到工作目录。
18. 重置本地修改
将所有本地修改的文件恢复到上次提交时的状态。
19. 查看长途堆栈
显示当前配置的长途堆栈地址。
20. 添加长途堆栈
- git remote add origin <仓库地址>
复制代码 将长途堆栈地址添加到本地堆栈。
三、进阶用法
1. 归并最近两次提交
方式一 rebase
Step1 启动交互式 rebase
运行以下命令进入交互式 rebase 界面:
- git rebase -i HEAD~2
- git rebase -i 要保留的前一个CommitID
-
- git rebase -i 要保留的CommitID^
复制代码 HEAD~2 体现要利用最近的两次提交。
Step2 修改 pick 为 squash(或 fixup)
在文本编辑器中,会显示类似如下的两行:
- pick <commit-hash-1> First commit message
- pick <commit-hash-2> Second commit message
复制代码 fixup 或 squash(两者都用于归并提交,但 squash 会保留归并提交的日志消息,而 fixup 会丢弃它,只保留第一个提交的日志消息)
将第二行的 pick 改为 squash(或简写 s),如下所示:
- pick <commit-hash-1> First commit message
- squash <commit-hash-2> Second commit message
复制代码 这会将第二次提交归并到第一次提交。
Step3 编辑提交信息
保存并退出编辑器后,Git 会要求你编辑归并后的提交信息。你可以保留或修改提交信息,然后保存并退出。
Step4 推送更改
如果你已经将这些提交推送到长途堆栈,而且想要同步这些更改,需要使用 --force(或简写 -f)推送:
- git push origin <分支名>
- --force
复制代码 方式二 reset
提交汗青如下:
- 提交5 CommitHash5
- 提交5信息
-
- 提交4 CommitHash4
- 提交4信息
-
- 提交3 CommitHash3
- 提交3信息
-
- 提交2 CommitHash2
- 提交2信息
-
- 提交1 CommitHash1
- 提交1信息
复制代码 需求是将提交3、提交4、提交5归并为一个提交
Step1 实验回退
先将版本回退到提交且在回退时保留工作区的变更
Step2 提交代码
- git add 需要提交的文件
- git commit "新的提交信息"
复制代码 四、指令详解
1. git reset
1.1 根本作用
git reset 是 Git 中非常强大的命令,用于将当前分支的提交汗青、暂存区(staging area)或工作目录(working directory)重置为指定的状态。它主要有以下几种作用:
①重置提交汗青(改变分支指向)
git reset 可以改变当前分支的 HEAD 指向到某个特定的提交。这意味着它可以取消某些提交,将分支指向之前的某个提交。
②修改暂存区
通过 git reset,你可以将某些文件从暂存区(staging area)中移除,但这些文件的内容不会被修改。这在你已经 git add 了文件,但想撤销这个利用时非常有用。
③修改工作目录
git reset 也可以更改工作目录中的文件状态,将文件恢复到之前的状态(即删除未提交的修改)。
1.2 利用模式
git reset 有三种常用模式,主要区别在于它们对 提交汗青、暂存区 和 工作目录 的影响:
- git reset --soft <commit>
- 提交汗青: 重置到指定提交,保留所有修改(提交记载指向更早的一个提交)。
- 暂存区: 保留所有文件的变革,文件仍保持在暂存区中。
- 工作目录: 工作目录不变,所有文件修改依然保留。
用途:撤销最近的提交,但保留代码和暂存的文件。
- git reset --soft HEAD~1 # 撤销最近的一次提交
复制代码
- git reset --mixed <commit>(默认模式)
- 提交汗青: 重置到指定提交。
- 暂存区: 暂存区会重置为指定提交的状态,取消 git add 的文件。
- 工作目录: 保留工作目录中的修改,代码仍然存在。
用途:撤销最近的提交,并将文件从暂存区中移除,但保留修改。
- git reset --hard
<commit>
- 提交汗青: 重置到指定提交。
- 暂存区: 暂存区会重置为指定提交的状态。
- 工作目录: 工作目录也会重置到指定提交的状态(所有未提交的修改都会丢失)。
用途:彻底重置分支,丢弃所有本地的修改和提交。
1.3 用法场景
- 撤销最近的提交:如果你刚提交了某些更改,但意识到有问题,可以使用 git reset --soft 或 --mixed 来撤销提交,保留代码。
- 修改暂存区:如果你用 git add 暂存了一些文件,但后来不想提交它们,可以使用 git reset <file> 将文件从暂存区移出。
- 完全重置到某个提交:如果你想丢弃所有未提交的更改并回到之前的某个状态,可以使用 git reset --hard
。
1.4 注意事项
- --hard 模式会丢失所有未提交的更改,所以在使用前肯定要审慎,确保这些改动不是你想保留的。
- git reset 会修改提交汗青,特殊是当你已经将提交推送到长途堆栈时,使用 reset 可能会造成团队协作问题。
2. git rebase
git rebase 是 Git 中用于重写提交汗青的强大工具,主要用来将一个分支的更改“移动”到另一个分支的底子之上。它通常用于保持线性的提交汗青,制止频仍出现分支归并时的 “merge commit”。
2.1 根本原理
git rebase 的根本思想是:
- 将一系列提交从一个基底上“复制”下来。
- 再将这些提交“应用”到另一个基底上。
假设有两个分支,feature 和 main,你想将 feature 的工作“重新定位”到 main 的最新提交之上,这时就可以使用 git rebase。
2.2 应用场景
- 将分支变基到另一分支上
- 交互式 rebase 用于修改汗青
- 处置处罚冲突与 rebase 的作用
2.3 根本的rebase
将分支变基到另一分支上
最常见的用法是将一个分支的更改移动到另一个分支的最新状态之上。例如,你正在 feature 分支开发,而 main 分支有了新的更新,你盼望将 feature 分支的工作基于最新的 main 分支。
- git checkout feature # 切换到 feature 分支
- git rebase main # 将 feature 分支变基到 main 分支
复制代码 发生的过程:
- Git 会“摘下” feature 分支的所有提交,将它们暂存起来。
- 然后,Git 会将 feature 分支“移动”到 main 分支的最新提交。
- 最后,Git 会把 feature 分支之前的那些提交一个一个地重新应用在新的基底之上。
这种利用相称于“更新”了 feature 分支,基于 main 最新的代码,且不产生额外的归并提交。
2.4 交互式rebase
git rebase -i(交互式 rebase)允许你对一系列提交进行更复杂的利用,如修改、删除、归并提交等。这对整理提交汗青非常有用。
交互式 Rebase 利用的常见步调:
- 选择要利用的提交:git rebase -i 会打开一个编辑器,显示一系列提交。每行代表一个提交,并带有一个利用命令。
示例:
- pick 3a1c5d7 Fix bug A
- pick 4b6f7d8 Add feature X
- pick 9b4f3e2 Improve documentation
复制代码 - 修改提交汗青:你可以将 pick 替换为其他命令来改变提交汗青。例如:
- pick:保持该提交不变。
- reword:修改提交信息。
- edit:停息并允许你修改该提交的内容。
- squash:将该提交与前一个提交归并。
- drop:删除该提交。
示例(将两次提交归并为一个提交):
- pick 3a1c5d7 Fix bug A
- squash 4b6f7d8 Add feature X
- pick 9b4f3e2 Improve documentation
复制代码
- 保存退出:保存并退出编辑器后,Git 会按照指定的利用重新组织这些提交。
交互式 rebase 常用于清理汗青,比如将多次小提交归并成一次,或者修正提交信息,确保汗青整齐。
2.4 冲突处置处罚
冲突发生
当 rebase 的过程中,Git 可能会遇到归并冲突。此时 Git 会停息并提示你解决冲突。
例如:
- Auto-merging file.txt
- CONFLICT (content): Merge conflict in file.txt
复制代码 解决冲突
当冲突发生时,你需要手动编辑冲突文件并解决冲突。然后使用以下命令继承 rebase:
- git add <conflicted-file> # 标记冲突文件已解决
- git rebase --continue # 继续 rebase
复制代码 如果你盼望放弃此次 rebase,可以使用:
- git rebase --abort # 取消 rebase 并回到操作前的状态
复制代码 跳过冲突
如果你不想解决冲突,而且想跳过有冲突的提交,可以使用:
2.5 区别
- git rebase 通过将分支的提交“移动”到另一分支之上来更新分支汗青,不会产生额外的归并提交。它保持提交汗青的“线性”。
- git merge 将两个分支的汗青归并在一起,并天生一个新的归并提交(merge commit),记载归并利用。
选择场景:
- 如果你想保持汗青清晰、线性,可以使用 rebase。
- 如果你不介意天生归并提交,且盼望保留所有汗青信息(包罗分支的分叉),可以使用 merge。
2.6 总结
- git rebase 的主要用途:重写汗青,保持线性提交记载,制止不须要的归并提交。
- 交互式 rebase:提供了强大的工具来编辑提交汗青,常用于清理和整理提交。
- 冲突处置处罚:rebase 过程中可能会遇到冲突,手动解决冲突并继承 rebase。
- 与 git merge 的区别:rebase 保持汗青线性,而 merge 保留所有汗青信息并创建归并提交。
3. git revert
git revert 是 Git 中用于撤销已提交的更改的命令。与 git reset 不同,git revert 并不会直接修改提交汗青,而是创建一个新的提交,专门用于撤销之前的更改。以下是 git revert 的一些常见用法:
3.1 撤销单个提交
要撤销某个特定提交,可以使用以下命令:
此中,<commit-hash> 是要撤销的提交的哈希值(通过 git log
可以查看提交汗青和哈希值)。
这将创建一个新的提交,内容与指定提交的更改相反,从而撤销该提交。
3.2 撤销多个提交
你可以通过指定一段提交汗青来撤销多个提交。格式如下:
- git revert <start-commit>^..<end-commit>
复制代码 这会逐个撤销范围内的每个提交,并为每次撤销天生一个新的提交。
3.3 撤销最近的一次提交
如果你想撤销最近的一次提交,可以轻巧地使用 HEAD 指针:
这会撤销你最新的提交。
3.4 使用 git revert 制止冲突
如果你想在撤销提交时跳过交互式的冲突解决(在一些环境下你可能并不关心),可以使用 --no-edit 或者 --no-commit 选项:
- --no-edit:不进入编辑模式,直接完成撤销。
- --no-commit:仅实验撤销利用,但不会自动提交。
例如:
- git revert HEAD
- --no-edit
复制代码 3.5 撤销已推送的提交
如果你已经将提交推送到长途分支,而且需要撤销它,可以使用 git revert 来制止直接修改汗青,特殊是在公共堆栈时,这是推荐的方法。撤销后需要再次推送:
- git push origin <branch-name>
复制代码 3.6 处置处罚归并提交的撤销
归并提交的撤销比力复杂,需要指定要撤销的父提交。你可以使用 -m 选项来指定父提交。例如,要撤销归并提交并保留主分支的变更:
- git revert -m 1 <merge-commit-hash>
复制代码 这里的 -m 1 指的是保留第一个父提交的内容。
3.7 总结
- git revert 创建一个新提交来撤销指定的更改,不会修改提交汗青。
- 常用于已推送到长途的提交,特殊是在协作项目中。
- 能处置处罚归并提交的撤销,且相对安全。
你可以根据详细需求选择不同的用法来撤销提交。如果是未推送到长途的本地更改,git reset 可能会是更符合的工具。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |