Git 基本命令汇总


一、背景

在开发过程中,我们基本都是使用Git进行代码管理,Git命令是必须要会的,下面就把Git常用命令总结下来。


二、Git命令

1、init & clone

# 在当前目录新建一个仓库
git init

# 在一个目录下新建本地仓库
git init [project-name]

# 克隆一个远程仓库
git clone [url]

2、config

# 查看配置
git config [--local][--global][--system] --list

# 查看当前git环境详细配置
git config -l 

# 查看系统config
git config --system --list

# 查看当前用户配置
git config --global --list

# 查看当前仓库配置信息
git config --local --list

# 查看全局账号
git config --global user.name

# 查看全局邮箱
git config --global user.email

# 修改配置
git config [--local][--global][--system] section.key value

# 设置当前项目的用户名
git config --local user.name [用户名]

# 配置当前用户的编码项,可以解决中文编码问题
git config --global core.quotepath false 

# 配置当前项目不忽略文件大小写,git默认忽略文件名的大小写,这点值得注意
git config --local core.ignorecase false 

3、remote

# 查看远程仓库地址命令
git remote -v

# 删除远程仓库地址
git remote remove origin

# 添加远程仓库地址 http://.....
git remote add origin [url] 

# 查看remote 地址,远程分支,还有本地分支与之相对应关系等信息
git remote show origin

# 删除那些远程仓库已经不存在的分支
git remote prune origin

# 建好 develop 分支的跟踪中央仓库分支
git checkout -b develop origin/develop

4、branch

# 创建分支
git branch [branch-name] 

# 查看当前分支
git branch 

# 查看本地和远程的所有分支
git branch -a 

# 查看远程所有分支
git branch -r 

# 查看本地分支与远程分支的映射关系
git branch -vv

# 切换分支
git checkout [branch-name] 

创建dev分支,然后切换到dev分支 
# git checkout命令加上 -b 参数表示创建并切换,相当于以上两条命令
git checkout -b [branch-name] 

# 删除一个分支
git branch -d [branch-name] 

# 强制删除一个没有合并的分支
git branch -D [branch-name] 

# 删除远程分支dev
git push origin :[branch-name] 

# 更新分支列表信息
# -p 表示删除不存在的远程跟踪分支
git fetch -p

# 清理无效的远程追踪分支
git remote prune origin

5、add

# 从工作区添加指定文件到暂存区
git add [file-name1] [file-name2] ... 

# 将工作区的被修改的文件和新增的文件提交到暂存区,不包括被删除的文件
git add . 

# u指update,将工作区的被修改的文件和被删除的文件提交到暂存区,不包括新增的文件
git add -u . 

# A指all,将工作区被修改、被删除、新增的文件都提交到暂存区
git add -A . 

6、commit

# 将暂存区所有文件添加到本地仓库
git commit -m "[massage]" 

# 将暂存区指定文件添加到本地仓库
git commit [file-name-1] [file-name-2] -m "[massage]" 

# 将工作区的内容直接加入本地仓库
git commit -am "[massage]" 

# 快速将当前文件修改合并到最新的commit,不会产生新的commit。
# 在提交commit后发现还有部分文件修改忘记提交了可以是用该命令
git commit --amend 

-m 是指直接在后面写上版本的注释,不加 -m 的话会用一个vim打开文件让你写入massage,有未追踪的文件将会失败,需要 add 加入暂存区。


7、pull & push

# 从远程仓库拉取代码到工作空间
git pull 

# 从远程仓库拉取指定分支代码
git pull origin [branch-name]

# 将文件添加到远程仓库
git push 

# 将代码推送到指定的远程分支
git push origin [branch-name]

# 强制将代码推送到指定的远程分支
git push --force origin [分支名称]

# 强制提交,当我们本地reset到旧的版本时,然后普通push会被拦截,因为此是本地HEAD指向比远程库还要旧
git push -f 

# 推送当前本地分支到指定远程分支
git push origin [branch-name] 

# 退到/进到 指定的commit【sha码】,然后强制推送到远程
git reset --hard [commit_id]
git push origin HEAD --force

# 删除远程分支
git push origin --delete [分支名称]

8、log & reflog

# 查看分支历史
git log

# 简化查看分之历史
# 没有pretty的是,只有commit id 前7位,加pretty的是全部的id
git log --oneline
git log --pretty=oneline

# 图形式展示分支历史
git log --graph

# 简化版图形式展示分支历史
git log --graph --oneline

# 简化版图形式展示分支历史附带展示已经修改的文件
git log --graph --oneline --name-only

# 查看分支合并情况
git log --graph --pretty=oneline --abbrev-commit 

# 使用git reset --hard命令改变了HEAD指向某个版本后后,还可以用git log --reflog查看所有版本。
git log --reflog

# 查看最新3条commit日志数据
git log -3 

# 查看某个文件的修改记录
git log -p [filename]

# 显示操作本地版本库的命令,包括commit和reset等,
# 在回退版本以后又后悔找不到commit id了可以使用此命令查看历史
git reflog

9、diff

文件对比

在我们不指定专门的文件夹的时候,git diff 默认比较的是整个项目 git 目录。

# 工作区与暂存区比较
git diff

# 工作区与 HEAD ( 当前工作分支) 比较
git diff HEAD

# 工作区比较上次的提交
git diff HEAD^

# 工作区比较上两次提交,于是有了,git diff HEAD~n 是比较上n次提交与现在工作区间的关系
git diff HEAD~2

# 查看add的文件修改内容
git diff HEAD [filename]

# 工作区与暂存区文件比较(查看未add的文件修改内容)
git diff [filename]

# 工作区比较特定提交
git diff [commitId]

# 工作区与特定提交文件进行比较
git diff [commitId] [filepath] 

# 暂存区与 HEAD 比较
git diff --cached

# 暂存区比较 HEAD 的某个文件差异
git diff --cached _posts/blog/2019-02-16-git.md

# 当前分支与 branchName 分支进行比较
git diff [branchName]

# 当前分支的文件与branchName 分支的文件进行比较
git diff [branchName] [filepath]

# 查看某两个版本之间的差异
git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9 b8e7b00c02b95b320f14b625663fdecf2d63e74c

# 查看某两个版本的某个文件之间的差异
git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9:filename b8e7b00c02b95b320f14b625663fdecf2d63e74c:filename

10、reset

当对整个版本进行操作

# --soft 其中可选参数soft表示单纯的切换HEAD指向的commit-id
# --mixed 默认值mixed参数表示先执行上面一步,然后再将commit-id里面的内容更新到暂存区
# --hard hard表示先执行上面两步,然后再将暂存区内容同步到工作区
git reset --{soft|(mixed)|hard} HEAD

# 用上两个版本里的所有文件撤回到暂工作区
git reset --hard HEAD^^ 

# 用指定版本的所有文件撤回到工作区
git reset --hard [commit id] 

当对当个文件进行操作

# 对单个文件操作时候只能用mixed参数,而且还是可省略
# 对单个文件操作时候HEAD指向不会变
# 将commit中指定的文件同步到暂存区中
git reset HEAD [file-name]

# 将指定commit-id中的文件替换掉暂存区的文件
git reset [commit-id] [file-name] 



11、merge

# 用于合并指定分支到当前分支
git merge [branch-name] 

# 退出当前分支合并,当合并后冲突很多,要撤回合并分支就可以用这个命令
git merge --quit

# 准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward 
# 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并
# 而fast forward合并就看不出来曾经做过合并。
git merge --no-ff -m [massage] [branch-name]

12、checkout

# 切换分支
git checkout [branch] 

# 最好加--,没有的话就把它当作切换分支看待,切换到另一个分支了,如果没有这个分支也会把它当作文件执行。
# 用暂存区的文件覆盖掉工作区的文件
# 如果暂存区没有可更新的就会用commit的文件更新工作区的文件
git checkout -- [file-name]

# 创建并切换分支
git checkout -b [new-branch-name] 

# 从远程仓库里拉取一条本地不存在的分支
git checkout -b [本地分支名] origin/[远程分支名]
# 如果出现提示
# fatal: Cannot update paths and switch to branch 'dev2' at the same time.
# Did you intend to checkout 'origin/dev2' which can not be resolved as commit?
# 表示拉取不成功。我们需要先执行,然后在执行上面命令
git fetch

git checkout -b [本地分支名] origin/[远程分支名]

13、stash

# 隐藏当前工作的修改
# 如果不隐藏自己修改的半成品代码,就会发生切换到别的分支后,将然后自己的半成品代码带入其他分支,这样就发生很多不必要的麻烦。
git stash 

# 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
git stash save message 

# 查看隐藏的工作信息列表
git stash list 

# 删除隐藏的工作信息
git stash drop 

# 恢复隐藏的工作信息,同时删除隐藏的工作信息
git stash pop 

# 恢复指定的隐藏工作信息,但是不会删除隐藏的工作信息
git stash apply [stash@{0}] 

14、cherry-pick

适用于在其他分支上修复了bug,但是这个bug在当前分支上依然存在,所以可以复制这个commit的过程,不必重写代码。

# 这个是复制一次commit提交,然后在当前分支上重新提交一遍;也就是将指定commit的合并到当前分支;
git cherry-pick [commit-id] 

# 将某个分支的多次commit合并到当前分支
git cherry-pick [commitHashA] [commitHashA]

# 将某个分支的commitA到commitB的所有commit合并到当前分支
git cherry-pick [commitHashA]..[commitHashA]

# 使用该命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使用下面的语法。
git cherry-pick [commitHashA]^..[commitHashA]

15、rebase

合并多次 commit 提交。

# 合并多次提交
# 非关键性的提交太多会让版本历史很难看、冗余,所以合并多次提交也是挺有必要的。
# 同样是使用以上的变基命令,不同的是变基命令打开的文本编辑器里的内容的修改。
# 将pick修改为squash,可以是多行修改,然后保存退出。
# 这个操作会将标记为squash的所有提交,都合并到最近的一个祖先提交上。
# 注意:不能对的第一行commit进行修改,至少保证第一行是接受合并的祖先提交。
# -i参数表示进入交互模式。
git rebase -i <commit range>

# 合并前两个历史提交,
# 会弹出vim修改信息,修改第二行的pick为s,或者为squash,squash为合并的意识,
# 然后保存退出编辑,会打开第二个vim编辑,合并并修改commit内容,
# 保存退出会产生一个新的commit id,这样就合并了两个commit
git rebase -i HEAD~2

16、show

# 显示此次提交的修改
git show [commitid]
  • 7
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值