打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Git 常用命令 // Jin Liu

从设计转型学开发的第一天起,老大只教我一件事,使用 Git。
比起一上来就给我各种任务写 HTML/CSS/JS 调各种 Bug, 让我熟练掌握 Git 这件事至今我都非常感激。
毫无疑问地说,Git 是当今编程学习里最基本的必备技能。

我记得很清楚,当时我问他,假如全世界的软件你只能保留一个在电脑,你的选择是什么?
Git,老大很肯定地回答,当时我很不解。
3年后,如果现在要我回答这个问题,我会给出同样的答案。

Git 的强大一本书都不足以全部说明,更何况一篇博客。
本文记录了我 3 年来使用 Git 最频繁的命令,很负责地说,学会这些基本也就能快乐地体会到 Git 的乐趣了 (持续整理更新ing)

Hope you enjoy!

1. 超实用 Alias

1
2
3
4
5
6
7
8
alias g='git'
alias gb='git branch'
alias gco='git checkout'
alias gcmsg='git commit -m'
alias gamend='git commit --amend -C HEAD'
alias gst='git status'
alias log='git log --oneline --graph --decorate --color=always'
alias logg='git log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)— %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative'

2. 取回远端 master 与本地 master 分支合并

1
2
3
4
5
6
7
gco master

g fetch --all 或者
g fetch origin master

g reset --hard origin/master(本地没有修改,所以完全覆盖也没关系) 或者
g rebase origin/master(本地有修改还没push)

3. 推送分支到远端

假设现在所在的分支是import,指定推送到远端分支liujin-import

1
g push origin import:liujin-import

假如远端的 liujin-import 分支已经不需要,可以直接覆盖掉

1
g push -f origin import:liujin-import

4. 追加文件到某个 commit

有时候修完某功能并提交了 commit 之后才发现还有一点小修改,这时候又不想再提交一个commit,可以追加这个文件到前一个commit,步骤如下:

1
2
git add 你要追加修改的文件
git commit --amend -C HEAD 或者 gamend

5. 查找包含某文件的 commit

1
2
git log 文件路径
git show commit_id

或者

1
git log --follow filename(绝对路径)

Ref: List all commit for a specific file

6. 把一个 commit 分拆为两个 commit

老大常说要养成一个小改动对应一个commit的习惯,但是有时候写得太乱懒得去分割就把很多改动做成了一个commit,这样子增加了以后维护的难度,所以要把一个 commit 分拆为多个 commit 怎么办呢?

  • 首先把你要分拆的 file reset 了:
1
2
git reset HEAD~1 path/to/file 
# This doesn't delete your changes to path/to/file
  • 接着修改当前这个 commit 的 message,命令是:
1
2
git commit --amend -v 
# -v参数是打开editor编辑
  • 然后就可以把 reset 出来那个 file 新建一个 commit,命令是:
1
git commit -v path/to/file

这样就把一个 commit 分拆为两个啦,^_^

7. 删除某些 commit

1
git rebase -i HEAD~10

8. 追加修改到之前某个 commit

假如 gst 发现已经有文件被修改,这时候需要把修改暂存起来。

1
git stash

接着找到你需要追加修改的那个commit id,如4b739bb

1
2
g rebase 4b739bb~ -i 或者
g rebase -i HEAD~5 #列出最近5个commit

这时候会自动打开编辑器,把你需要修改的 commit 前面的 pick 改成 edit,保存,关闭编辑器,这时候会回到终端,再输入:

1
g stash pop

把暂存的修改读出来,然后做修改,g add .,最后

1
g rebase --continue

9. 查找含有特定关键字的 commit

  • git log --grep
    最基本的用法
  • git log --grep=frotz --grep=nitfol --since=1.month
    查找一个月以内commit log message里含有 frotz 或者 nitfol 的 commits

  • git log --grep=frotz --author=Linus
    查找指定作者

  • git grep -l -e frotz --and -e nitfol
    查找同一行含有 frotznitfol 的文件

  • git grep -l --all-match -e frotz -e nitfol
    查找文件里面含有 frotznitfol 的文件(不局限于同一行)

10. 清空 git working copy 还没追踪的文件

  • git clean -f

  • git clean -f -d
    如果还想删除目录

  • git clean -f -X
    如果只是想删除忽略的文件

  • git clean -f -x
    如果想删除忽略和非忽略的文件

11. 清理本地仓库

长时间做一个项目,经常需要 git fetch,这样做每次都会拉回远端的全部分支。
即使远端有些分支已经删除,但是运行git branch -a还是会显示已删除的分支,
长时间下来这个列表就会很长很长,这时候就需要清理一下本地的仓库了:

1
2
git remote prune origin
# `prune`会删除任何不存在于远端仓库的分支,这样运行 `git branch -a`命令的时候顿时就清静了

12. 创建追踪远端分支的本地分支

1
2
gb dev origin/r1-dev
#Branch dev set up to track remote branch r1-dev from origin.

13. 分支移动

1
2
g branch -f master HEAD~3
# 把 master 分支强制移到 HEAD 前面第三个 commit

14. Revert一个 Merge

git revert -m 1 M -> W

1
2
3
---o---o---o---M---x---x---W
/
---A---B

15. 获取短的 commit hash

1
git rev-parse --short HEAD

16. commit 了以后才记起来忘了创建 .gitignore, 垃圾文件都已经提交

比如说一个nodejs项目,一开始的时候就忘记了创建.gitnore文件忽略掉node_modules的内容,所以其中的内容就已经被提交了。

即使紧接着你在.gitignore加了一行node_modules, 已经被提交的文件是不会自动删除的。

这时候你就需要做的就是:

1
2
3
git rm --cached path/to/ignored
#nodejs案例就是
git rm -r --cached node_modules

17. 提交所有被删除的文件

1
$ git add -u

This tells git to automatically stage tracked files — including deleting the previously tracked files.

If you are using git 2.0, you should now use:

1
$ git add -u :/

Warning, starting git 2.0 (mid 2013), this will stage files on the whole working tree.
If you want to stage file only under your current path with that working tree, then you need to use

1
$ git add -u .

See “Difference of “git add -A” and “git add .””.

Ref: StackOverflow

18. 撤销上一次 git add . 操作

这种情况通常是因为忘记添加.gitignore文件,
或者一时手快把一些非必要的文件(如node_modules)跟踪了, 解决办法:

You can use git reset. This will ‘unstage’ all the files you’ve added after your last commit.
If you want to unstage only some files, use

1
git reset -- <file 1> <file 2> <file n>

Also it’s possible to unstage some of the changes in files by using

1
git reset -p
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
你所需要知道的一些git 的使用命令:Git大师
Git入门教程
Git常用命令解说
学Git,为自己(下篇)
Git和Github的最常用命令有哪些?
Git使用中的一些奇技淫巧
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服