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 -mgit 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 XXXgit 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 ,如果没问题,会回到原先的分支并拉到最新的数据

