Git知识点集锦
Git配置 、 Git分支管理 、 Git常用命令等常用操作总结
Git配置
1 2 3 4 5
| // 配置别名 $ git config --global alias.st status $ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch
|
.gitignore(忽略文件)
1 2 3 4 5
| // -f 强制添加.gitignore内被忽略的文件 $ git add -f 1.log
// 检查某个忽略文件对应规则 $ git check-ignore -v 1.log
|
空目录(克隆远程仓库)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| // 克隆远程仓库到本地 $ git clone https://github.com/your/your.git
// 所有工作区文件放到暂存区 $ git add .
// 指定文件放入暂存区 $ git add README.md
// 暂存区文件提交到版本库 $ git commit -m 'commit msg'
// 本地版本库推送到远程库 $ git push origin <远程分支>
|
已存在目录(关联远程仓库)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| // 初始化git残酷 $ git init
// 提交到暂存区 $ git add .
// 提交到版本库 $ git commit -m 'commit msg'
// 推送之前关联远程仓库 https://github.com/your/your.git $ git remote add origin <远程仓库地址>
// 拉取远程分支 $ git pull origin <远程分支>
// 推动到远程分支 $ git push origin <远程分支>
// -u 本地分支关联远程分支,下次直接用git push $ git push -u origin master
|
常用命令
git status
1 2
| // 获取仓库的当前状态,可以知道所在分支、暂存区&commit有哪些文件 $ git status
|
git diff
1 2
| // 比较文件变化,一般用界面工具(sourcetree或TortoiseGit) $ git diff README.md
|
git log
1 2 3 4 5 6
| // 查看历史提交记录(git log冗余信息太多了) $ git log --pretty=oneline /** 218b04d77161dac258769d839aa339844e748c07 修复安卓问题 5aae705cc0299d141a280c7cba67e7d13062308d 修复ios问题 */
|
git reset
1 2 3 4 5 6
| // 回滚到上一个版本,HEAD^^指上一个版本,直接用commit hash也能实现同样的效果。 $ git reset --hard HEAD^
// 把暂存区指定文件放回工作区 $ git reset HEAD README.md
|
git reflog
1 2
| // 记录你使用过的每个命令 $ git reflog
|
git checkout
1 2 3
| // 丢弃工作区指定文件的修改 $ git checkout -- README.md
|
git remote
1 2 3 4 5 6 7 8 9 10 11
| $ git remote -v /** origin git@github.com:michaelliao/learn-git.git (fetch) origin git@github.com:michaelliao/learn-git.git (push) */
// 删除远程仓库名 $ git remote rm origin
// 关联一个远程库时必须给远程库指定一个名字,origin是默认习惯命名; $ git remote add origin git@server-name:path/repo-name.git
|
git checkout 和 git switch
1 2 3 4 5 6 7
| // 等同于git branch dev & git checkout dev两条命令 $ git checkout -b dev // 基于当前分支创建新分支 $ git checkout -b dev origin/dev // 基于远程分支创建新分支
// 创建并切换分支 $ git switch -c dev3
|
git merge
1 2 3 4
| // 合并分支 $ git merge dev1
|
git branch
1 2 3
| // 删除分支 $ git branch -d dev1 $ git branch -D dev2 // 强制删除分支
|
git stash
1 2 3 4
| $ git stash // 储藏工作区内容 $ git stash list // 储藏列表 $ git stash apply stash@{0} // 恢复指定储藏的内容到工作区,不删除储藏的内容 $ git stash pop // 恢复储藏的内容到工作区,同时删除储藏的内容
|
git cherry-pick
1
| $ git cherry-pick 4c805e2 // 复制其他分支特定的提交到当前分支
|
git rebase
git tag
1 2 3 4 5 6 7 8 9 10
| // 指定commit hash打标签 $ git tag v1.0 f52c633 // 指定commit hash打标签并写描述 $ git tag -a v0.1 -m "version 0.1 released" 1094adb
$ git tag -d v0.1 // 删除标签 $ git push origin v1.0 // 推送标签到远程分支 $ git push origin --tags // 推送所有标签到远程分支 $ git push origin :refs/tags/v0.9 // 删除远程标签
|
git square 合并多个提交为一个提交
使用git rebase -i开始交互式变基。你需要指定你想要合并的提交之前的提交,比如合并最近的三个提交。
1
| git rebase -i "commit hash"
|
出现如下编辑text, 将除了第一个提交之外的pick改为squash或者简写为s,以表示你想要将这些提交合并到前一个提交中:
1 2 3
| pick e3a1414 第一个提交信息 squash 5e01c2f 第二个提交信息 squash 7e401a5 第三个提交信息
|
保存后强制推送
1
| git push origin your-branch --force
|
实操效果如下:


配置SSH
1 2 3 4 5 6 7
| // ssh // 默认的git://使用ssh,但也可以使用https等其他协议 // 使用SSH模式,生成公钥和私钥,提交代码不用输入用户名和密码 // 生成id_rsa和id_rsa.pub两个文件,私钥给自己(用户主目录里.ssh目录),公钥放到远程仓库配置中。 $ ssh-keygen -t rsa -C "youremail@example.com"
// http
|
搭建Git服务器
Ubuntu或Debian
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| // 第一步,安装git: $ sudo apt-get install git
// 第二步,创建一个git用户,用来运行git服务: $ sudo adduser git
// 第三步,创建证书登录: $ 收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件, 把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
// 第四步,初始化Git仓库: $ sudo git init --bare sample.git $ sudo chown -R git:git sample.git // 把owner改为git
// 第五步,禁用shell登录: $ git:x:1001:1001:,,,:/home/git:/bin/bash 改为 git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
|