Git

Git 基础

下载安装

https://git-scm.com/ 下载对应需求的 Git 包安装即可

设置用户名和邮箱

git config --global user.name 'zhangguangying'
git config --global user.email 'hyuiing@163.com'

–global 参数表示设置全局的参数,如果只是想在单个项目中设置参数可以去除

初始化仓库

git init

提交

# 添加到索引
git add filename
# 提交到本地仓库
git commit -m 'message'

删除

git rm <filename> # 从仓库中删除文件,之后需要执行 add / commit

工作树与索引

在 Git 中,我们实际操作的目录称为工作树。在 Git 仓库与工作树之间有索引,索引是为了向仓库提交作准备的区域。

仓库、索引与工作树

远程仓库

新建远程仓库

在 gitee 上新建一个远程仓库 tutorial ,在本地将其加入远程仓库

git remote add origin https://gitee.com/hyuiing/tutorial.git

origin 表示远程仓库的名称,因为默认 push 的远程仓库名就是 origin,所以一般给远程仓库都设置为 origin

提交内容到远程仓库

git push origin master

从远程仓库拉取

git pull origin master

处理冲突

当向远程仓库 push 文件的时候,如果其他人已向远程仓库 push 了内容,push 会被拒绝。这时候需要先把远程仓库 pull 到本地,Git 会尝试进行自动合并。假如自动合并失败,说明你与其他人修改了同样的文件,这时候你需要将冲突的内容修改,然后再依次执行 add / commit / push 命令。

分支

分支的运用

在 Git 中可以自由的创建分支,但是要先确定运用规则才可以有效的利用分支。

Merge 分支

Merge 分支是为了可以随时发布 release 而创建的分支,一般比较稳定,它可以作为 Topic 的源分支使用。通常,我们会将 master 分支作为 Merge 分支使用。

Topic 分支

Topic 分支是为了开发新功能或修复 Bug 等任务而创建的分支,是从稳定的 Merge 分支创建而来。完成作业后,要把 Topic 分支合并到 Merge 分支。

分支的切换

切换分支使用 checkout 。对于未提交的内容或未添加到索引区的内容,在切换分支后会从原来的分支移动的目标分支,假如 checkout 的目标分支的相同文件也有修改,checkout 会失败,这时要么先提交内容,要么先把内容暂存 stash。事后,再把 stash 中取出暂存的修改,应用到原先的分支或其它分支上。

分支的合并

merge

如下图所示,bugfix 分支是从 master 分支分叉而来。在合并 bugfix 分支时,假如 master 分支没有任何改变,那么可以进行直接合并,此为 fast-forward (快进)合并。但是如果 master 分支在 bugfix 分支分叉出去后有了新的更改,在合并时就会出现冲突,需要把冲突修改后再进行一个提交。

master与bugfix分支

rebase

与 merge 的图一样,使用 rebase 方法进行分支合并,rebase bugfix 分支到 master 分支,这时可能发生冲突,修改冲突的文件后,继续执行 rebase 。

分支操作

创建分支

git branch <branchname> 
git branch # 显示分支列表
git branch -a # 显示分支列表,包括远程分支
git push origin <localbranchname>:<originbranchname> # 创建远程分支,冒号前是本地分支名称,冒号后是远程分支名称

切换分支

git checkout <branchname>

创建分支并切换

git branch -b <branchname>

删除分支

git branch -d <branchname>
git push origin --delete <branchname> # 删除远程分支

合并分支

merge 合并

将 分支合并到当前分支,若有冲突,将冲突文件解决后再执行 add / commit 命令

git merge <branchname>

rebase 合并

与 merge 的区别是少了次提交

# issue3 分支
git rebase master
    # 解决冲突后
git rebase --continue
# master 分支
git merge issue3

标签

Git 可以使用两种标签:轻标签和注解标签。

  • 轻标签
  • 添加名称
  • 注解标签
  • 添加名称
  • 添加注解
  • 添加签名

发布标签一般是用注解标签来添加注解或签名的。

添加轻标签

git tag <tagname>

如果没有参数 ,可以显示标签列表。

使用 git log --decorate ,可以显示包含标签的历史记录。

添加注解标签

git tag -a <tagname>,执行后自动启动编辑区,输入注解
git tag -am 'message' <tagname>,通过 -m 选项添加注解
git tag -n ,显示标签的列表及注解

删除标签

git tag -d <tagname>

改写提交

commit –amend

修改当前分支的最近一次的提交内容和注解。

git add <filename>
git commit --amend # 接着在打开的编辑页面修改最近一次提交的信息

revert

否定指定的提交,否定也会作为一条记录

git revert HEAD

reset

删除指定的提交,删除之后没有提交记录。

git reset --hard HEAD~~
  • –hard ,删除提交 / 索引 / 工作区的内容
  • –mixed ,删除提交 / 索引的内容
  • –soft ,删除提交的内容

git reset 出现错误时,可以使用如下命令还原

git reset --hard ORIG_HEAD

cherry-pick

提取本地其他分支的提交到当前分支

git cherry-pick fed66d # 后面的一串字母即是其它分支的提交记录,若是冲突,解决冲突后执行一次提交即可

rebase -i

汇合提交,将多个提交记录汇合成一个,用于整合功能相似的提交信息。

git rebase -i HEAD~~ # 这样可以看到 HEAD 到 HEAD~~ 的提交记录,将第二行的 pick 改为 squash 保存后修改提交信息即可

merge –squash

汇合分支上的提交,然后一同合并到分支

git merge --squash issue2

记住用户名和密码

// 修改 .git/config 文件
vim .git/config
// 添加如下配置
[credential]
    helper = store

之后再执行一次命令输入用户名和密码即会记住,以后不用再输