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 mergegit 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 log
或git reflog
配合,找到其中的一个commit - 例子:
git reset --hard e32e81
- 与
git cherry-pick 分支名
:挑捡提交,合并某一分支上的单个commitgit tag
:查看标签git tag v1.0.0 commit名
:给某个 commit 打 taggit push origin v1.0.0
:本地 tag 推送到线上git tag -d v1.0.0
:删除本地 taggitxxx :删除线上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
:删除所有缓存的 stashgit 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 add
暂存文件,再继续 rebasegit rebase --continue
,如果没问题,会回到原先的分支并拉到最新的数据