使用前的准备

本地Git

安装Git软件完成后,必须配置git使用者 姓名邮箱,用于提交远程仓库时,如果别人发现BUG可以有渠道联系对应代码作者来修复

git config --global user.name xxx
git config --global user.email xxx@qq.com

远程Git

Git主要用于 高效多人协助开发 ,那必须要有远程git仓库,可以自己搭(gitlab),也可以使用别人搭的(github/gitee)

HTTPS与SSH的区别

每次克隆远程仓库回到本地时,你都有2种模式可以选择,到底你选哪种呢?

HTTPS

简单无须任何配置,每次克隆远程仓库时,都需要输入账号和密码(对于程序员不友好)

SSH

一次配置,以后克隆任意拉取,无需输入账号密码,一个字

如何生成SSHKEY呢?

命令:ssh-keygen

Git 初始化本地仓库

有两种方法:

1、手动创建,并关联远程仓库

// 创建本地仓库
mkdir demo
cd demo
git init

// 关联远程仓库
git remote add origin https://gitee.com/xxxx/bbb.git

注意:push/pull缺省远程仓库名时,默认远程仓库名为origin,所以一般都把远程仓库名为origin

2、克隆clone远程仓库

git clone https://gitee.com/xxxx/aaa.git demo

注意:克隆出来的是远程仓库默认分支

Git 个人工作流程

image

1、工作区 --> 索引区 (添加)
git add xxx.txt
git add .   // 添加当前目录下所有文档到索引区

2、索引区 --> 本地仓库 (提交)
git commit -m "初始化项目"

3、本地仓库 --> 远程仓库 (推送)
git push

4、远程仓库 --> 本地仓库 (拉取)
git pull

Git 常用命令

1、克隆  
       克隆远程仓库默认分支 git clone xxxx
       克隆远程仓库指定分支 git clone -b 远程分支名 远程仓库地址
2、查看本地仓库状态  git status
3、查看当前本地仓库分支情况  git branch
4、查看所有分支情况 git branch -a

// 本地切换分支
5、git checkout <本地分支名>

// 创建本地分支(把当前分支作为参考生成新分支)
6、git branch <分支名>    

// 删除本地分支
7、git branch -d <分支名>

// 删除远程分支
8、git push origin --delete <远程分支名称>

// 提交代码到远程仓库
9、git push <远程主机名> <本地分支名>:<远程分支名>
   (如果<本地分支名>与<远程分支名>同名可以简写:
    git push <远程主机名> <本地分支名>)
    
// 增加到缓存区
10、git add .

// 提交代码到本地仓库
11、git commit -m '提交说明'

// 拉取远程仓库到本地仓库
12、git pull

// 更新远程分支列表
13、git remote update origin --prune

克隆远程仓库分支问题

远程有多分支时,克隆回来的是哪个分支呢?

远程仓库中,哪条分支设置为默认分支,克隆回来的就是哪条分支,并且只有默认分支,不会有其它分支

注意:
1、master分支,一般都是存放稳定的代码,可用于生产环境的,所以是只读分支
2、开发和提交代码一般不在master分支上进行

如果需要获取远程非默认分支,该如何?

在本地仓库创建一条分支,并拉取指定远程分支,最后切换(已有本地仓库)

git checkout -b dev origin/dev

本地仓库分支问题

本地创建分支时,远程没有此分支,如何推送到远程

// git常用指令的第九条
git push origin dev

分支关联

场景:远程仓库创建了一个新分支,本地也创建了一个新分支,远程分支和本地分支是没有任何关联,现在需要把他们关联起来,该如何做?

// 先拉取下远程仓库
git pull
// 关联分支
git branch --set-upstream-to=origin/<远程分支名> <本地分支名>

特别注意:
这种关联是单向的,只能从远程拉取到本地,而本地推送到远程,不会推送到关联的远程分支,二是会创建同名新分支

冲突

多人协助开发时,经常会遇到代码冲突问题,主要解决步骤为:

1、先把远程仓库拉取下来pull
2、找出冲突的代码文件,并选择用自己的代码解决问题还是用别人的代码解决问题
3、重新加入缓冲区,并提交代码到本地仓库
4、在push到远程
小乌龟 —— 解决冲突
找出冲突代码并解决后,右击选择“解决冲突”
然后提交代码到本地,并推送到远程

分支合并

将dev分支合并到master分支,注意必须先切换master分支,然后再进行合并

1、先切换到要最终合并到的分支上
git checkout master

2、如果是多人开发的话 需要把远程master上的代码pull下来
git pull origin master

3、把dev分支的代码合并到master上
git merge dev

4、推送远程
git push origin master

5、筛选出已经与当前分支合并的分支
git branch --merged

一般来说,列表中没有 `*` 的分支通常都可以用 `git branch -d` 来删掉。原因很简单,既然已经把它们所包含的工作整合到了其他分支,删掉也不会损失什么。

6、筛选出尚未与当前分支合并的分支
git branch --no-merged
重要提醒:
一般分支测试完成,没有什么问题就可以合并到dev或master分支,合并后,分支的生命周期就完结了,此时你就可以删除本地和远程对应的分支,以免分支过多难以管理

标签

标签主要用于做个标记,方便以后代码的回退,标记一般都是本地使用,但也可以上传到远程

创建标签

普通标签
git tag v1.0.3

附加注解标签
git tag -a v1.0.3 -m "xxxx"

查看标签

查看标签列表
git tag

查看具体标签信息
git show v1.0

回退

reset (用减法方式回退)

回退到上一个版本
git reset --hard HEAD^
回退到指定版本
git reset --hard commit_id

由于是真正的本地回退,为了让远程也回退,必须执行强制推送
git push -f

revert (用加法方式回退)

git revert commit_id

**删除最后一次远程提交**
git revert HEAD

远程仓库使用

查看当前项目的远程库

查看远程库的简短名字列表
git remote

查看远程库显示对应的克隆地址
git remote -v

一些说明

1、git本地仓库保留着一个名为HEAD的特别指针,用于指向当前工作的分支

在git merge或者git pull,git push的时候可能会出现fatal: refusing to merge unrelated histories,原因是仓库A和B的分支不相关,此时加上--allow-unrelated-histories就可以了

104828720
1.4k 声望222 粉丝

编程其实很枯燥,所以一定要有追求。