
引言
在之前浅尝辄止地学习过一段时间的 Git ,在日常的项目中也没有使用 Git 进行版本管理,最近趁着放假系统性学习了一下 Git ,下面是学习过程中记录的一些 Git 常用命令以及一些常用配置,供日后学习和实践当中使用,不当之处,敬请指出。
Git 最小配置
安装之后需要进行的最小配置,配置用户的用户名和邮箱,每一个 Git 提交都会使用这些信息,它们会写入到你的每一次代码提交中。
# 配置用户名和邮件地址
# 某账号下所有的 Git 仓库都有效
git config --global user.name 'your name'
git config --global user.email 'your email'
# 只对当前仓库有效
git config --locl user.name 'your name'
git config --local user.email 'your email'
查看 Git 的配置
# 查看所有配置信息
git config --list
# 查看不同类型(local/global)的配置项
git config --list --local
git config --list --globbal
清除 Git 的配置
# 清除 global 类型的配置项
git config --unset --global 某个配置项
# 清楚某个仓库的配置项
git config --unset --local 某个配置项
本地基本操作
-
初始化Git仓库
git init该命令将创建一个名为
.git的子目录,这个子目录含有初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。 但是,在这个时候,我们仅仅是做了一个初始化的操作,项目里的文件还没有被跟踪。如果在一个已存在文件的文件夹(而非空文件夹)中进行版本控制,应该开始追踪这些文件并进行初始提交。 可以通过
git add命令来指定所需的文件来进行追踪,然后执行git commit。git add *.c git add LICENSE git commit -m 'initial project version' -
克隆已有的仓库
git clone <url>使用
git clone命令会在创建一个项目目录,并在这个目录下初始化一个.git文件夹,从远程仓库拉取下所有数据放入.git文件夹,然后从中读取最新版本的文件的拷贝。 如果你进入到这个新建的项目文件夹,你会发现所有的项目文件已经在里面了,准备就绪等待后续的开发和使用。 -
查看变更情况
git status -
查看当前工作在哪个分支上
git branch -v -
切换到指定分支
git checkout 指定分支 -
把当前目录及其子目录下所有变更都加入到暂存区
git add . -
把仓库内所有变更都加入到暂存区
git add -A -
创建正式的 commit
git commit -
比较某文件工作区和暂存区的差异
git diff 某文件 -
比较某文件暂存区和 HEAD 的差异
git diff --cached 某文件 -
比较工作区和暂存区的所有差异
git diff -
比较暂存区和 HEAD 的所有差异
git diff --cached -
把工作区指定文件恢复成和暂存区一样
git checkout 文件1 文件2 文件3 -
把暂存区指定文件恢复成和 HEAD 一样
git reset 文件1 文件2 文件3 -
把暂存区和工作区所有文件恢复成和 HEAD 一样
git reset --hard -
用 difftool 比较任意两个 commit 的差异
git difftool 提交A 提交B -
查看哪些文件没被 Git 管控
git ls-files --others
加塞临时任务的处理
-
把未处理完的变更先保存到 stash 中
git stash -
临时任务处理完后继续完成之前的工作
git stash pop或者
git stash applypop 不保留 stash,apply保留 stash
-
查看所有 stash
git stash list -
取回某次 stash 的变更
git stash pop stash@{数字n}
修改个人分支的历史
-
修改最后一次 commit
1)在工作区修改文件 2)git add . 3)git commit --amend -
修改中间的 commit (代号 X )
1)git rebase -i X前面一个commit的id 2)在工作区修改文件 3)git add . 4)git rebase --continue 后续可能需要处理冲突,直到 rebase 结束
查看变更的历史
-
当前分支各个 commit 用一行显示
git log --oneline -
显示最近的 n 个commit
git log -n -
用图示显示所有分支的历史
git log --oneline --graph --all -
查看涉及到某文件变更的所有 commit
git log 某文件 -
某文件各行最后修改对应的 commit 以及作者
git blame 某文件
分支与标签
-
基于当前分支创建新分支
git branch 新分支 -
基于指定分支创建新分支
git branch 新分支 已有分支 -
基于某个 commit 创建新分支
git branch 新分支 某个commit的id -
创建分支并切换到该分支
git checkout -b 新分支 -
列出本地分支
git branch -v -
列出本地和远端分支
git branch -v -
列出远端所有分支
git branch -rv -
列出名称符合某样式的远端分支
git branch -rv -l '某样式' -
安全删除本地某分支
git branch -d 拟删除分支 -
强制删除本地某分支
git branch -D 拟删除分支 -
删除已合并到 master 分支的所有本地分支
git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d -
删除远端 origin 已不存在的所有本地分支
git remote prune origin -
给 commit 打标签
git remote prune origin
两分支间的集成
-
把A分支合入到当前分支,且为 merge 创建 commit
git merge A分支 -
把A分支合入到B分支,且为 merge 创建 commit
git merge A分支 B分支 -
把当前分支基于B分支做 rebase,以便把B分支合入到当前分支
git rebase B分支 -
把A分支基于B分支做 rebase,以便把B分支合入到A分支
git rebase B分支 A分支 -
用 mergetool 解决冲突
git mergetool
Git 和 Github 的简单同步
配置公私钥
ssh-keygen -t rsa -b 4096 -C "your email"
使用该命令后连续按三次回车,即可在~/.ssh文件夹生成一对公私钥文件,其中id_rsa为私钥,id_rsa.pub为公钥。
复制id_rsa.pub里的内容到 Github 个人设置页面,选择SSH and GPG keys选项卡,添加上述的公钥内容即可。
和远端的交互
-
列出所有的 remote
git remote -v -
增加 remote
git remote add url地址 -
删除 remote
git remote remove remote的名称 -
改变 remote 的 name
git remote rename 旧名称 新名称 -
把远端所有分支和标签的变更都拉到本地
git fetch remote -
把远端分支的变更拉到本地,且 merge 到本地分支
git pull remote名称 分支名 -
把本地分支 push 到远端
git push remote名称 分支名 -
删除远端分支
git push remote --delete 远端分支名 或者 git push remote :远端分支名 -
向远端提交指定标签
git push remote 标签名 -
向远端提交所有标签
git push remote --tags
Git 集成使用禁忌
以下命令会对分支造成严重破坏,请不要在工作中使用以下命令
- 禁止向集成分支执行
push -f操作 - 禁止向集成分支执行变更历史 (
rebase) 的操作