git工具 -- 选择性提交之`git add -p`

git add -p 的详细介绍、用法与场景案例

git add -p 是 Git 中一个非常有用的命令,允许你交互式地选择哪些改动需要添加到暂存区。这对于需要细粒度控制版本控制系统中改动的人来说特别有用。以下是详细介绍、用法和场景案例。

1. 基本介绍

git add -p(也可以使用 git add --patch)命令会把当前工作目录中的改动分成多个块(hunk),并逐个地展示给用户,让用户选择是否要暂存这些改动。用户可以对每个块进行以下操作:

  • y:暂存这个块
  • n:不暂存这个块
  • q:退出,不做任何处理
  • a:暂存当前文件中所有块
  • d:不暂存当前文件中的任何块
  • s:拆分当前块
  • e:手动编辑当前块
  • ?:显示帮助

2. 用法

git add -p

3. 场景案例

场景1:提交一部分改动

假设你在开发过程中对一个文件做了多处改动,但你只想把其中的一部分改动提交到版本库中。使用 git add -p 可以让你逐个选择哪些改动需要暂存,哪些改动暂时不处理。

例如,你修改了 main.py 文件:

# main.py

def foo():
    print("Hello World")  # 修改1

def bar():
    print("Goodbye World")  # 修改2

你希望只提交修改1。可以使用以下步骤:

  1. 运行 git add -p

    $ git add -p
    
  2. Git 会显示第一个改动块:

    diff --git a/main.py b/main.py
    index 83db48f..f84f3e7 100644
    --- a/main.py
    +++ b/main.py
    @@ -1,3 +1,3 @@
     def foo():
    -    print("Hello")
    +    print("Hello World")  # 修改1
    
     def bar():
    
  3. 输入 y 暂存这个改动。

  4. Git 会显示下一个改动块:

    @@ -4,3 +4,3 @@ def foo():
    
     def bar():
    -    print("Goodbye")
    +    print("Goodbye World")  # 修改2
    
  5. 输入 n 不暂存这个改动。

这样,你就只暂存了修改1,可以进行提交:

$ git commit -m "Update greeting in foo()"

场景2:拆分和编辑块

有时,一个块包含了你只想暂存的部分内容。在这种情况下,你可以选择拆分块或手动编辑块。

例如,你对同一个块做了多处修改:

# example.py

def foo():
    print("Hello")  # 原来的
    print("World")  # 新添加的

def bar():
    print("Goodbye")

你想只暂存 print("World") 的改动,可以这样做:

  1. 运行 git add -p

  2. Git 显示第一个改动块:

    diff --git a/example.py b/example.py
    index 83db48f..f84f3e7 100644
    --- a/example.py
    +++ b/example.py
    @@ -1,3 +1,3 @@
     def foo():
    -    print("Hello")
    +    print("Hello")  # 原来的
    +    print("World")  # 新添加的
    
     def bar():
    
  3. 输入 s 拆分这个块。

  4. Git 会拆分成两个块,分别显示:

    @@ -1,3 +1,3 @@
     def foo():
    -    print("Hello")
    +    print("Hello")  # 原来的
    
  5. 对第一个块输入 n

  6. Git 显示第二个块:

    @@ -2,3 +2,4 @@ def foo():
     +    print("World")  # 新添加的
    
  7. 对第二个块输入 y

通过这种方式,你就只暂存了 print("World") 的改动。

4. 总结

git add -p 是一个非常强大且灵活的工具,可以让你在复杂的开发过程中更细粒度地控制哪些改动被暂存和提交。它适用于需要精细控制改动的场景,例如代码审查、调试或分阶段提交功能开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值