Git 常用命令

统一概念

  • 工作区(Workspace):改动(增删文件和内容)
  • 暂存区(Index/Stage):输入命令:git add 改动的文件名,此次改动就放在了「暂存区」
  • 本地仓库(Repository):输入命令:git commit 此次修改的描述,此次改动就放到了「本地仓库」,每个commit,我叫它为一个「版本」
  • 远程仓库(Remote):输入命令:git push 远程仓库
  • commit-id:输入命令:git log,最上面那行commit xxxx,后面的字符串就是 commit-id

常见命令

  • config: git 配置

    • git config --list:列出所有 git 配置
    • git config <key>:检查 Git 的某一项配置
    • git config --global user.name johan 设置用户名
    • git config --global user.email xxx@github.com:设置邮箱
    • git config user.name:查看用户名
    • git config user.email:查看邮箱
  • add:添加文件到暂存区

    • git add xxx:添加某个文件到暂存区
    • git add .:添加当前更改的所有文件到暂存区
  • status:查看工作区状态

    • git status:查看工作区修改了哪些文件
  • commit:提交暂存的更改

    • git commit:提交暂存的更改,会打开编辑器
    • git commit -m "you message":提交暂存的更改,并记录下备注
    • git commit -am:等同于 git add . && git commit -m
    • git commit --amend:对最近一次的提交的信息进行修改
    • git commit --amend --no-edit:将修改直接合并到上一次 commit,并且使用上次的提交信息
    • git commit -m xxx --no-verify:跳过git提交钩子
  • pull:拉取远程分支并合并到本地

    • git pull <远程主机名> <远程分支名>:<本地分支名>:从远程仓库拉去代码并合并到本地,可简写为 git pull ,等同于 git fetch && git merge
    • git pull --rebase <远程主机名> <远程分支名>:<本地分支名>:使用 rebase 的模式进行合并
    • git pull origin master —allow-unrelated-histories:合并两个不同的项目(本地一个,远端仓库一个)
  • fetch:拉取远程分支

    • git fetch <远程主机名> <分支名> :获取远程仓库特定分支的更新
    • git fetch --all:获取远程仓库所有分支的更新
  • merge:合并分支

    • git merge <branch-name>:合并某某分支
  • branch:分支

    • git branch <branch-name>:新建本地分支,但不切换
    • git branch:查看本地(仓库)所有分支
    • git branch -r:查看远程(仓库)所有分支
    • git branch -a:查看远程、本地所有分支
    • git branch -D <branch-name>:删除本地分支
    • git branch -m <old-branch-name> <new-branch-name>:重命名分支名
  • push:推到远程分支

    • git push origin dev -f:强推到远程分支
    • git push origin raw --force:强制提交本地分支覆盖远程分支
  • remote:远程仓库

    • git remote:查看远程仓库名称
    • git remote -v:查看远程仓库地址
    • git remote add origin [url]:添加远程仓库地址
    • git remote set-url origin [url]:修改远程仓库地址
    • git remote rm origin:删除远程分支
      • 先删后加,先rm,在add
    • git remote show origin:查看远程分支和本地分支的对应关系
    • git remote show origin:查看远程分支的详细内容
  • git log:查看所有线上的提交记录

  • git reflog:查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

  • git reset --hard xxx:回溯到其中的一个版本

    • git loggit reflog配合,找到其中的一个commit
    • 例子:git reset --hard e32e81
  • git cherry-pick 分支名:挑捡提交,合并某一分支上的单个commit

  • git tag:查看标签

    • git tag v1.0.0 commit名:给某个 commit 打 tag
    • git push origin v1.0.0:本地 tag 推送到线上
    • git tag -d v1.0.0:删除本地 tag
    • gitxxx :删除线上tag
  • git checkout XXX

    • git checkout .:丢弃工作区所有的修改
    • git checkout README.md:丢弃工作区其中一个文件的修改
      • git status 配合, git status 查看工作区的修改,如果有个文件不想动了,就 checkout 它,自然就还原了

不常见命令

  • gitk:打开git的图形化工具

  • gitjk:撤消您刚刚在git中所做的操作

  • git help -g:展示帮助信息

  • git fetch --all && git reset --hard origin/master:回到远程仓库的状态

    • 抛弃本地所有的修改,回到远程仓库的状态
  • cat .git/HEAD:查看分支文件

  • git stash:把本地修改暂存到暂存区

    • git stash save "message" :执行存储时,添加备注,方便查找
    • git stash pop:推出暂存区,并删除暂存记录
    • git stash apply:恢复最近的存储,但不会把存储从存储列表中删除,某人使用第一个存储,即 stash@{0},如果要使用其他各,git stash apply stash@{$num}
    • git stash list:查看 stash 了哪些存储
    • git stash clear:删除所有缓存的 stash
    • git ls-files --stage:查看 index 暂存区

区别

git log 和 git reflog 的区别

git log:查看所有线上的提交记录

git reflog:查看所有提交的 commit 历史

git alias配置

[alias]
    st = status -sb
    co = checkout
    br = branch
    mg = merge
    ci = commit
    ds = diff --staged
    dt = difftool
    mt = mergetool
    last = log -1 HEAD
    latest = for-each-ref --sort=-committerdate --format=\"%(committername)@%(refname:short) [%(committerdate:short)] %(contents)\"
    ls = log --pretty=format:\"%C(yellow)%h %C(blue)%ad %C(red)%d %C(reset)%s %C(green)[%cn]\" --decorate --date=short
    hist = log --pretty=format:\"%C(yellow)%h %C(red)%d %C(reset)%s %C(green)[%an] %C(blue)%ad\" --topo-order --graph --date=short
    type = cat-file -t
    dump = cat-file -p
    lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

常用问题

git pull origin dev 

报错:fatal: Not possible to fast-forward, aborting.

原因是你和其他人修改了同一个文件,而且别人比你先提交,所以此时你再本地执行 git pull 和 git push 都无法完成

一般用:

git pull origin dev --rebase

一般情况下,执行完这个,如果没有冲突,后面就可以进行正常的更新和提交

但是如果出错(你和别人修改了同一行代码,导致git不能自动合并),就会报错,本地版本会变成:HEAD detached at 239b7d4。说明 rebase 失败

git rebase 失败

此时,按照黄色字的提示,手动解决冲突文件,并git add 暂存文件,再继续 rebasegit rebase --continue ,如果没问题,会回到原先的分支并拉到最新的数据

参考资料

Last Updated:
Contributors: johan