独立使用Git时的常见场景

200 阅读3分钟

1. 删除不需要的分支

// 删除本地分支
git branch -d <branchName> // 分支名称
// -d 删除失败,确定此分支要删除,可执行以下命令
git branch -D <branchName>

2. 修改commit的信息

  • 修改最新的commit信息

    amend翻译成中文:修改

    输入
    git commit --amend
    进入vi编辑器,修改后
    按下Esc键 输入 :wq! 退出
    
  • 修改旧的commit信息

    命令:git rebase -i <commitId>

    ps:仅在自己的分支操作并未贡献到团队分支

    进入交互:

    • pick 简写:p 使用当前commit

    • reword 简写:r 使用当前commit,但是修改当前的commit信息

    Esc :wq!

    进入的界面可以修改commit信息

    Esc :wq! 退出

  • 将连续的多个commit整合到一个

    命令:git rebase -i <commitId> // 此处的commitId为连续的commitId的父commitId

    • squash 简写:s 保留当前commit,但是将其合到前一个commit

    即:在需要合并的commit信息前写s,

    Esc wq! 后进入界面修改commit信息

    Esc wq! 退出

  • 将不连续的多个commit整合到一个

    命令:git rebase -i <commitId>

    p 选择需要合并的commit

    s 与上面的commit挨着

    Esc :wq! 后进入界面修改commit信息

    Esc :wq! 退出

3. 比较文件的差异

  • 比较暂存区和HEAD文件的差异

    git diff --cached

  • 比较工作区和暂存区文件的差异

    git diff    // 默认效果
    
    git diff -- <file1> [<file2>]  // 比较某个文件或多个文件的差异
    

4. 恢复文件

  • 让暂存区恢复和HEAD一致

    git reset HEAD // 恢复暂存区所有文件
    git reset HEAD -- <file>...  // 恢复暂存区某个文件或多个文件(空格分隔)
    
  • 让工作区的文件恢复和暂存区一致

    git checkout -- <file>  // 恢复工作区的某个文件
    
  • 消除最近的提交

    // 回退到之前的某次commit,以后的commit会丢失(慎用)
    git reset --hard <commitId>
    

5. 查看不同提交的指定文件的差异

```
// 查看两个分支的差异
git diff <branch1> <branch2>

// 查看两个分支指定文件的差异
git diff <branch1> <branch2> -- <file>

// 查看两个分支对应的commitId指定文件的差异(等同于两个分支比较)
git diff <commitId1> <commitId2> -- <file>
```

6. 删除文件的正确处理

  • 先删除文件后添加到暂存区

  • 使用命令 (直接将删除文件的情况放到暂存区)

    git rm <file>  // file指删除的文件名
    

7. 开发中临时加塞紧急任务的处理

```
// 1.将修改的文件存储起来
git stash

// 2.可以使用以下命令查看存储的内容
git stash list

// 3.处理紧急任务并且提交commit

// 4.恢复之前的存储的修改到工作区
// @{0}序号中数字大的代表的是较早的stash

git stash apply = git stash pop apply@{0}
作用  1. 将存储的修改恢复到工作区,默认为第一个,指定某一个的命令为:
          git stash apply stash@{$num}
      2. 不修改存储区域的列表,可以重复使用
git stash pop = git stash pop stash@{0}
作用  1. 将存储的修改恢复到工作区,默认为第一个,指定某一个的命令为:
          git stash pop stash@{$num}
      2. 删除存储区对应的stash
```

补充:git stash clear :删除所有缓存的stash

应用场景:在一个feature分支上开发新功能,此时需要修复bug。使用git stash,然后切回dev分支修复bug,commit之后再切回feature分支,恢复回来。此时工作区的代码只是我上次stash时候的内容,那个时候我还没有修复这个Bug。所以当前内容不会包含我修复那个Bug的内容。这种情况下,我想要的效果是 unstash之后feature分支上的代码既包括我新增代码又修复了bug。

解决方案:

1)在feature分支上,先把dev上修复bug的那个commit 执行cherry-pick。

2)再git stash pop继续开发。