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的父commitIdsquash简写:s保留当前commit,但是将其合到前一个commit
即:在需要合并的commit信息前写
s,Esc wq! 后进入界面修改commit信息
Esc wq! 退出
-
将不连续的多个commit整合到一个
命令:
git rebase -i <commitId>p选择需要合并的commits与上面的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继续开发。