git(五)-checkout进阶与stash

本文详细介绍了Git中的几个关键命令,包括如何使用`git checkout --<file>`丢弃工作目录中的更改,以及`git reset HEAD <file>`从暂存区撤销更改。此外,还深入探讨了stash命令的使用场景及具体操作流程,帮助读者更好地掌握版本控制技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

git checkout – test.txt原理:
作用:丢弃掉相对于暂存区最后一个添加的文件内容所做的变更。
实际操作:
这里写图片描述

范围:针对于工作区

git reset HEAD test.txt作用:
将之前添加到暂存区(stage index)的内容从暂存区移除到工作区。
实际操作:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   test.txt


Administrator@CeaserWang MINGW64 /e/Study/mygit (master)
$ git reset HEAD test.txt
Unstaged changes after reset:
M       test.txt

Administrator@CeaserWang MINGW64 /e/Study/mygit (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")

git checkout 2424324 作用:
这里写图片描述
重点内容
上面我们生成一个游离分支,接下来做一下修改在其上。
这里写图片描述

整个过程:
这里写图片描述

分支改名:
git branch -m master master2

stash命令:
• 保存现场
• git stash
• git stash save ‘name XXX ’
• git stash list
• 恢复现场
• git stash apply(stash内容并不不删除,需要通过git stash drop
stash@{0}⼿手动删除)
• git stash pop(恢复的同时也将stash内容删除)
• git stash apply stash@{0}
git stash drop stash@{0} 删除保存的记录

实际操作:
我们在master分支创建新的分支dev,然后在master分支修改文件并且进行一次提交,接着切换到dev分支,在dev分支修改也进行一次提交,此时如果再次执行切换到master分支会出错:

$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
        test.txt
Please commit your changes or stash them before you switch branches.
Aborting

这在我们的日常开发中非常常见,从主干拉了2个分支A和B,开发者者在A分支开发了一半,但是紧接着要转到B分支进行开发,但是A分支的代码是不能提交的,因为没有开发完毕,才是就需要暂存A分支的内容,下次回到A的时候从暂存中恢复出来。
这里写图片描述

<think>我们正在讨论`git checkout`和`git checkout -b`两个命令的区别及使用场景。根据引用内容,我们可以总结如下: 1. **`git checkout <branch_name>`**: - 这个命令用于切换到已存在的分支。例如,如果你有一个名为`develop`的分支,你可以使用`git checkout develop`来切换到该分支。 - 如果分支不存在,使用这个命令会报错。 2. **`git checkout -b <new_branch_name>`**: - 这个命令用于创建并切换到一个新的分支。它相当于以下两个命令的组合: ```bash git branch <new_branch_name> # 创建新分支 git checkout <new_branch_name> # 切换到新分支 ``` - 例如,`git checkout -b feature/login`会创建一个名为`feature/login`的新分支,并立即切换到该分支。 ### 使用场景 - **需要切换到已存在的分支时**:使用`git checkout <branch_name>`。例如,当你想从当前分支切换到`main`分支时。 - **需要创建新分支并立即开始在该分支上工作时**:使用`git checkout -b <new_branch_name>`。例如,当你开始开发一个新功能时,通常会基于当前分支(如`develop`)创建一个新的功能分支。 ### 补充说明 在Git 2.23版本之后,引入了两个新的命令来替代`git checkout`的部分功能,以减少混淆: - **`git switch <branch_name>`**:用于切换分支(替代`git checkout <branch_name>`)。 - **`git switch -c <new_branch_name>`**:用于创建并切换分支(替代`git checkout -b <new_branch_name>`)。 因此,如果你使用的是Git 2.23或更高版本,推荐使用`git switch`命令来操作分支,因为它更专注于分支操作,而`git checkout`则用于恢复工作区文件等操作[^2]。 ### 示例 假设你当前在`main`分支上,想要创建一个新的分支并开始工作: ```bash # 创建并切换到新分支 git checkout -b feature/add-user # 或者(在Git 2.23+) git switch -c feature/add-user ``` 然后,你可以进行一些修改并提交。完成后,如果你想切换回`main`分支: ```bash git checkout main # 或者(在Git 2.23+) git switch main ``` ### 注意事项 - 在切换分支之前,确保当前工作目录是干净的(没有未提交的修改),或者使用`git stash`来保存修改,否则切换分支可能会失败。 ### 相关问题 1. 在Git中,如何查看所有分支以及当前所在的分支? 2. 如何删除一个本地分支? 3. `git switch`和`git checkout`在功能上有何异同? 4. 如何将新建的分支推送到远程仓库? [^1]: `git checkout -b`和`git checkout`的区别在于前者创建并切换分支,后者仅切换分支。 [^2]: 在Git 2.23版本后,推荐使用`git switch`替代`git checkout`进行分支切换操作。</think>### `git checkout` `git checkout -b` 的区别及使用场景 #### 1. **`git checkout <branch_name>`** - **功能**:切换到**已存在的分支** (该分支必须已在本地仓库中创建) - **使用场景**: - 在不同功能分支间切换(如 `main` → `develop`) - 查看历史分支的代码状态 - 修复其他分支的 bug - **示例**: ```bash git checkout develop # 切换到已存在的 develop 分支 ``` #### 2. **`git checkout -b <new_branch_name>`** - **功能**:**创建并切换**到新分支 (相当于 `git branch <name>` + `git checkout <name>` 的组合) - **使用场景**: - 基于当前分支创建新功能分支(如 `git checkout -b feature/login`) - 快速实验性开发(创建临时分支) - 修复 bug 时创建独立分支 - **示例**: ```bash git checkout -b fix/header-error # 创建并切换到新分支 ``` --- ### 核心区别对比 | **特性** | `git checkout <branch>` | `git checkout -b <new_branch>` | |------------------------|--------------------------------|--------------------------------| | 分支要求 | 分支必须已存在 | 自动创建新分支 | | 操作类型 | 分支切换 | 创建+切换 | | 等效命令 | 无 | `git branch <name> && git checkout <name>` | | 常见使用场景 | 日常分支切换 | 启动新功能/修复 | --- ### 操作流程示例 #### 场景:开发新功能 ```bash # 1. 从 main 分支创建新功能分支 git checkout main # 切换到主分支 git checkout -b feature/payment # 创建并切换到支付功能分支 # 2. 开发完成后提交 git add . git commit -m "Add payment module" # 3. 切换回主分支合并 git checkout main # 切换回主分支 git merge feature/payment # 合并功能分支 ``` --- ### 注意事项 1. **未提交的修改**: 切换分支前需提交或暂存(`git stash`)修改,否则可能丢失变更[^4]。 2. **Git 2.23+ 替代方案**: 新版 Git 推荐更语义化的命令: ```bash git switch <branch> # 替代 git checkout <branch> git switch -c <new_branch> # 替代 git checkout -b ``` 3. **远程分支关联**: 新分支首次推送需设置上游: ```bash git push -u origin feature/payment ``` --- ### 典型错误场景 ```bash # 错误:尝试切换到不存在分支 git checkout non-existing-branch # 输出:error: pathspec 'non-existing-branch' did not match... # 正确:先创建再切换 git checkout -b non-existing-branch # 成功创建并切换 ``` [^1]: `git checkout -b` 是创建+切换组合命令,而 `git checkout` 仅用于切换。 [^2]: Git 2.23+ 推荐使用 `git switch` 替代分支操作。 [^4]: 分支切换要求工作区干净,否则需暂存修改。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值