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

1
2
// 分支线变基
$ 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 合并多个提交为一个提交

  1. 使用git rebase -i开始交互式变基。你需要指定你想要合并的提交之前的提交,比如合并最近的三个提交。

    1
    git rebase -i "commit hash"
  2. 出现如下编辑text, 将除了第一个提交之外的pick改为squash或者简写为s,以表示你想要将这些提交合并到前一个提交中:

    1
    2
    3
    pick e3a1414 第一个提交信息
    squash 5e01c2f 第二个提交信息
    squash 7e401a5 第三个提交信息
  3. 保存后强制推送

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