【Git 篇】 如果想暂存本地代码,怎么办?

187 阅读3分钟

多人开发的项目中, 难免会出现 merge 头疼的事情,本地还有未完成的半成品, 但是需要去 pull 最新的代码去集成,这时候暂存这个概念就用到了, 下面先解释一下基本语法:

git restore --staged <file> 用于将已添加到暂存区(staging area)的文件移除暂存区,但不会删除或修改工作目录中的文件内容。这个命令主要用于撤销对文件的暂存操作,使其从暂存状态回到未暂存状态。

具体操作步骤:

  1. 查看当前暂存的文件: 你可以先使用 git status 查看哪些文件已被暂存。

    git status
    
  2. 取消暂存特定文件: 如果你只想取消某个特定文件的暂存,可以运行:

    git restore --staged <file>
    

    例如,取消暂存 example.txt 文件:

    git restore --staged example.txt
    
  3. 取消暂存所有文件: 如果你想取消所有已暂存文件的暂存,可以使用:

    git restore --staged .
    
  4. 再次查看状态: 执行完后,建议再次运行 git status 以确保文件已经被取消暂存。

例子:

$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    new file:   example.txt

$ git restore --staged example.txt

$ git status
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
    modified:   example.txt

在这个例子中,example.txt 被从暂存区移除了,但文件本身的修改仍然保留在工作区中,等待后续操作。

接下来就有人问了,如果你只想取消某几个文件夹下的 暂存文件,该怎么操作?

如果你只想取消某几个文件夹下的文件的暂存操作,可以使用 git restore --staged 结合文件夹路径来取消暂存的文件。以下是如何操作的具体步骤:

操作步骤:

  1. 查看当前暂存的文件: 使用 git status 查看哪些文件已被暂存。

    git status
    
  2. 取消特定文件夹下的文件的暂存: 使用 git restore --staged <folder_path> 取消指定文件夹下所有已暂存文件的暂存。例如,如果你想取消 src/ 文件夹下所有文件的暂存,可以运行:

    git restore --staged src/
    
  3. 取消多个文件夹的暂存文件: 如果你想取消多个文件夹下的文件的暂存,直接列出这些文件夹路径。例如,取消 src/docs/ 两个文件夹下文件的暂存:

    git restore --staged src/ docs/
    
  4. 再次查看状态: 执行完后,建议再次运行 git status 确认文件已被从暂存区移除。

例子:

假设你有以下文件结构:

src/
  main.js
  utils.js
docs/
  README.md
test/
  test_main.js

你想要取消 src/docs/ 文件夹下所有已暂存文件的暂存:

$ git status
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    new file:   src/main.js
    new file:   src/utils.js
    new file:   docs/README.md
    new file:   test/test_main.js

$ git restore --staged src/ docs/

$ git status
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    new file:   test/test_main.js

Changes not staged for commit:
    new file:   src/main.js
    new file:   src/utils.js
    new file:   docs/README.md

此时,src/docs/ 文件夹中的文件已从暂存区移除,而 test/ 文件夹下的文件仍然保持在暂存区中。

我都能猜到你接下来又有问题要问了:取消某个文件夹下的暂存文件以后, 接下来怎么提交代码??进行 git add. 之后,暂存的文件又恢复了, 怎么办?

我已经帮你想好办法了。。。。

当你取消某个文件夹下的暂存文件后,执行 git add . 会将所有文件(包括之前取消暂存的文件)重新暂存。因此,如果你想提交代码而不再暂存特定文件夹下的文件,需要更加细致地处理暂存操作。

解决方案:

  1. 取消文件夹的暂存文件后,不要再使用 git add .,而是手动选择需要暂存的文件或文件夹进行 git add,以避免重新暂存取消的文件。

操作步骤:

  1. 取消特定文件夹的暂存文件: 使用 git restore --staged 来取消指定文件夹下的文件的暂存。例如:

    git restore --staged src/
    
  2. 手动添加你想提交的文件或文件夹: 例如,假设你只想提交 test/ 文件夹下的文件,可以明确指定你要暂存的文件夹或文件:

    git add test/
    
  3. 提交已暂存的更改: 暂存了你想提交的文件后,运行 git commit 提交更改。

    git commit -m "Your commit message"
    

例子:

假设你有以下文件结构:

src/
  main.js
  utils.js
docs/
  README.md
test/
  test_main.js

你已经取消了 src/ 文件夹的暂存文件,现在你只想提交 test/ 文件夹下的更改:

  1. 取消 src/ 文件夹的暂存

    git restore --staged src/
    
  2. 手动暂存 test/ 文件夹

    git add test/
    
  3. 提交已暂存的文件

    git commit -m "Commit test folder changes"
    

其他方法:

如果你经常遇到这种情况,可以使用 .gitignore 临时忽略某些文件或文件夹,这样在使用 git add . 时这些文件不会被重新暂存。