Git 操作小技巧
查看提交记录
git log --oneline
将提交历史纪录表现为一行显示
git log --pretty=oneline
的别名 --pretty
:创建高级自定义输出
git log --graph
图形化展示组合: git log --oneline --graph
git log -p
查看最近一次提交的文件改动
git log -p <filename>
查看单个文件在历次提交中的详细变更
git log --stat
显示 在每个提交(commit)中有哪些文件被修改了, 这些文件分别添加或删除了多少行内容
git blame [fileName]
文件的每一行的详细修改信息:包括 SHA 串,日期和作者(甩锅必备)
git blame -L 40,+10 [fileName]
指定开始和结束行
git show [commit hash]
显示某次提交的内容变化
reset 文件
git reset --hard [commit hash]
回退到一个特定的历史版本,丢弃这次提交之后的所有变更
git reset [commit hash]
回滚到一个特定的历史版本。将这个版本之后的所有变更移动到“未暂存”的阶段。这也就意味着你需要运行 git add . 和 git commit 才能把这些变更提交到仓库
git reset --soft [commit hash]
回滚到一个特定的历史版本。将这次提交之后所有的变更移动到暂存并准备提交阶段。意味着你只需要运行 git commit 就可以把这些变更提交到仓库
git checkout -- readme.txt
让这个文件回到最近一次 git commit 或 git add 时的状态 git checkout readme.txt
也是可以的
git reset HEAD readme.txt
把暂存区的修改撤销掉(unstage),重新放回工作区
分支操作
git checkout -
切换到最近使用过的分支
git checkout -b local_branch origin/remote_branch
拉取远端分支到本地分支或者创建本地新分支
git branch -r -d origin/branch-name
删除远端分支
git branch --set-upstream develop origin/develop
指定本地 develop 分支与远程 origin/develop 分支的链接
git branch | grep 'branchName' | xargs git branch -D
批量删除分支(通过 shell 管道命令来实现的批量删除分支的功能)
git branch 输出当前分支列表
grep 是对 git branch 的输出结果进行匹配, 匹配规则为branchName
xargs 的作用是将参数列表转换成小块分段传递给其他命令
这条命令的意思就是:
从分支列表中匹配到指定分支,然后一个一个(分成小块)传递给删除分支的命令,最后进行删除。
git branch --contains [commit hash]
罗列包含此提交的分支
检查改动
git diff
显示当前你所有已做的但没有加入到暂存区里的修改
git diff --cached
哪些文件将被提交(commit)
git diff branch2
假设当前分支 branch1, git diff branch2
等价于git diff branch2 branch1
,结合 diff 的描述+ 代码段
或- 代码段
,表示:在branch2
上执行+ 代码段
/- 代码段
操作后能得到branch1
git stash save "desc"
设置本次 stash 操作的备注git stash apply
和 git stash pop
的区别 : 前者不会从 stash list 中 中移除,移除请使用git stash drop
修改最近一次提交 ⭐
git commit --amend
场景:进行一次提交后,突然意识到某文件有一个 debugger
没有删掉
2 种解决方案:
- 修复问题,重新提交一次,附上必要的描述信息,结果是多出一条 commit 信息.
- 修复问题,
git add .
然后git commit --amend
,命令会把最近一次的变更追加到你最新的提交,同时也会给你一个编辑提交信息的机会。 (如果已经推送到远端,就执行git push -f(--force)
,注:不要在很多人共同工作的分支上这样做 , gitlab 上被保护的分支是不能进行强推的!)
合并多个 commit 提交
- git rebase -i [在此之前做合并的 commit 号(不包括)] 或 git rebase -i HEAD~2 合并最后两个
- 修改为 squash 把它与前一提交合并(除了第一行外的其他行,都把 pick 修改为 squash)
- 输入新的 commit 信息
git rev-parse HEAD
显示当前最近的 commit hashgit rev-parse <branchName>
显示某分支最近的 commit hash
git reflog
查看自己使用过的命令
git push -u origin develop
等价 git push --set-upstream origin develop
(切出新分支,第一次执行 push 操作时候用到)
-u 的意思是将 origin 的 develop 分支设为本地当前仓库的上游。拉取代码时就可以直接执行 git pull,而不必添加分支参数
git push origin local_branch:remote_branch
推送本地分支到远程分支,local_branch 必须为你本地存在的分支,remote_branch 为远程分支,如果 remote_branch 不存在则会自动创建分支。 类似,git push origin :remote_branch
,local_branch 留空的话则是删除远程 remote_branch 分支
忽略大小写 ⭐
git config core.ignorecase true
# 全局设置: git config --global core.ignorecase true