TABLE OF CONTENTS

  1. 工作原理
  2. 配置文件
  3. 常用命令
  4. 远程仓库
  5. 分支管理
  6. 标签管理

工作原理

.git文件夹:版本库,创建.git版本库时,git自动给我们创建了暂存区。
git add是把文件添加进去,实际上就是把文件修改添加到暂存区。
git commit提交更改,把暂存区的所有内容提交到当前分支。
每次修改,需要git add添加到暂存区后,git commit才能把修改提交到分支。

配置文件

  • 局部配置文件(当前项目):项目路径下的/.git/config
    配置命令git config --local user.name="xxx"
  • 全局配置文件(当前用户):用户目录%HOMEPATH%下的.gitconfig
    配置命令git config --global user.name="xxx"
  • 系统配置文件:Git安装目录下的/etc/gitconfig
    配置命令git config --system user.name="xxx"

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
git init // 初始化仓库
git add file.txt // 添加文件
git commit -m "comment" // 提交改变到缓存
git log // 查看改动信息
git diff file1 file2 // 文件差异查看

/* 版本回退 */
git log --pretty=oneline // 查看简要信息,版本号
git reset --hard HEAD^ // 当前版本
git reset --hard <版本号> // 重置版本
git reflog // 查看历史命令
git status // 查看状态

/* 撤销修改 */
git checkout -- file // 丢弃工作区的修改

/* 删除文件 */
rm file // 本地直接删除
git rm file // a.版本库中删除
git commit -m "remove file" // b.提交更新

/* 配置别名 */
git config --global alias.st status // 为全局status配置别名
git config --global alias.last "log -l" // 为全局配置git last显示最近一次提交

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" // 贼好用

远程仓库

1
2
3
4
ssh-keygen -t rsa -C "youremail@example.com"
git remote add origin git@github.com:solano-yume/yourrepository.git // 关联远程仓库
git push -u origin master // 推送master分支所有内容到远程仓库
git clone git@github.com:solano-yume/yourrepository.git // 克隆仓库,ssh协议,也可以用https协议

分支管理

  • HEAD指向当前分支,master分支是主分支。
  • git分支合并只需改改指针,工作内容不变。

团队开发分支策略

  • master分支仅用于发布新版本,极其稳定,平时不能在上面干活
  • 团队在dev分支上,每个人都有自己的分支,时不时往dev分支合并即可。

合并方式

  • 普通模式合并:合并后的历史有分支,能看出曾经做过哪些合并。
  • fast forward:合并后看不出曾经做过合并。

推送分支:将该分支上的所有本地提交推送到远程库

  • master主分支、dev开发分支时刻同步远程,bug分支一般用于本地修复bug无需同步,feature分支是否推送到远程,取决你是否和小伙伴合作在上面开发
  • 抓取失败:推送冲突时,先抓取最新提交到本地,然后本地合并,解决冲突,再推送即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/* 基本 */
git checkout -b dev // 创建并且切换到分支,等价下面两行
git branch dev
git checkout dev

git branch // 查看当前分支
git merge dev // 合并dev分支到当前分支
git branch -d dev // 删除分支
git branch -D dev // 丢弃一个没有被合并的分支
git log --graph --pretty=oneline --bbrev-commit // 查看分支合并图(简单)
git log --graph // 查看分支合并图(详细)
git merge --no-ff -m "merge with no-ff" dev // 不使用fast forward模式

/* Bug分支 */
git stash // 存储工作现场
... // 创建分支issue-xxx改bug
git stash list // 查看工作现场保存在哪
git stash apply // 恢复现场,不删除保存的stash内容,要删除用git stash drop
git stash pop // 恢复现场,删除保存的stash内容
git stash apply stash@{0} // 多次stash,选择需要恢复的现场

/* 多人协作 */
git remote // 查看远程库信息
git remote -v // 查看远程库信息(详细)
git push origin dev // 推送dev分支

git checkout -b dev origin/dev // 创建origin的dev分支到本地
git pull // 把最新的提交同步到本地(抓下来)

git branch --set-upstream branch-name origin/branch-name // 建立本地分支和远程分支的关联

标签管理

1
2
3
4
5
6
7
8
9
10
11
12
git tag v1.0 // 给当前分支打上标签
git log --pretty=oneline --abbrev-commit // a.查找历史提交comment id
git tag v0.9 7825a50 // b.给comment id打上标签

git tag // 查看所有标签
git show v0.9 // 查看标签信息
git tag -a v0.1 -m "version 0.1 released" 7825a33 // 创建带说明的标签
git tag -s v0.2 -m "signed versioin 0.2 released" fe1233a // PGP私钥签名标签
git tag -d v1.0 // 删除标签
git push origin v1.0 // 远程推送标签
git push origin --tags // 一次性推送全部未推送到远程的本地标签
git push origin :refs/tags/v0.9 // 远程删除标签

声明:本站所有文章均为原创或翻译,遵循署名 - 非商业性使用 - 禁止演绎 4.0 国际许可协议,如需转载请确保您对该协议有足够了解,并附上作者名 (Tsukasa) 及原文地址