学习的视频B站:
《学会Git玩转GitHub【全】》
《极客Python之Git实用教程(小甲鱼)》
分支合并 《尚硅谷Git教程全套》
Git是版本控制软件;
Github是项目代码托管的平台,借助git来管理项目代码。
首先推荐一个学习Git的可视化网站
https://learngitbranching.js.org
一、关于GitHub
首先注册账户,我的是qq邮箱qq密码。
一些基本概念:
仓库(Repository),仓库用来存放项目代码,每个项目对应一个仓库,多个开源项目则有多个仓库;
收藏(Star),收藏项目,方便下次查看;
复制克隆项目(Fork);
发起请求(Pull Request,张三想改李四的项目通过发起请求);
关注(Watch),关注项目,当项目更新可以接收到通知;
事务卡片(Issue),发现代码BUG,但是目前没有成型代码,需要讨论时用。
二、 Git 基本命令
1.基本信息设置,打开Git,输入命令
-
设置用户名
git config --global user.name ‘renaihu’
-
设置用户名邮箱
git config --global user.email ‘[email protected]’
- 查看设置 git config --list
删除配置信息:
git config --global --nuset user.name
git config --global --unset user.email
注意:git config –global 参数,有了这个参数,
表示你这台机器上所有的Git仓库都会使用这个配置,
当然你也可以对某个仓库指定的不同的用户名和邮箱。
2.初始化一个新的Git仓库
1、创建文件夹
mkdir test
2、在文件内初始化git(创建git仓库)
cd test
git init
3.向仓库添加文件
创建a1.php文件到工作目录 touch a1.php
添加a1.php到暂存区 git add a1.php git add -A 可以提交工作区中所有的文件
添加a1.php到仓库 git commit -m '第一次提交文件’
4. 修改仓库文件
修改文件:vi a1.php
添加到暂存区:git add a1.php
提交到仓库:git commit -m '第一次通过git修改文件并提交到仓库’
查看一下状态:git status
5.删除仓库文件
删除仓库文件:git rm a1.php (同时本地的也被删除了)
提交操作:git commit -m ‘第一次通过git删除仓库文件’
6.重命名 git mv 老文件 新文件
7. 查看历史提交记录 git log
三、Git 远程管理仓库
1.克隆操作
git clone + 仓库地址
地址在这:
2.将本地仓库同步到git远程仓库中
git push
如果无法同步或没有权限
The requested URL returned error: 403 Forbidden while accessing
答案:私有项目,没有权限,输入用户名密码,或者远程地址采用这种类型
vi .git/config
点开.git里的config
# 将
[remote "origin"]
url = https://github.com/用户名/仓库名.git
修改为:
[remote "origin"]
url = https://用户名:密码@github.com/用户名/仓库名.git
远程团队协作案例:
- 项目经理创建远程仓库(不要点初始化,因为我们要用命令git init)
- 项目经理建立一个本地的仓库
-
初始化 git init
将源码复制进来
- 配置仓库用户信息 该配置到了.git/config文件,这里的配置仅仅针对当前项目有效。
- 配置别名,别名“taobao”就代表那两个地址
-
项目经理推送本地仓库到远程仓库
git push taobao 分支名 (输入用户名,密码)
推完之后会附带生成远程跟踪分支
然后远程仓库就可以看到。
-
项目经理邀请成员加入团队 & 成员接收邀请
在GitHub上操作
-
成员克隆远程仓库到本地 (再建立一个新的文件夹)
git clone + 仓库地址(在本地生成.git 文件,配别名;默认主分支有对应的远程跟踪分支)
-
成员作出贡献
修改源码文件
git add
git commit
git push 别名 分支 (输入用户名 密码)
-
项目经理更新成员提交的内容
git fetch taobao(将修改同步到远程跟踪分支上)
git merger 远程跟踪分支
正常的数据推送 和 拉取步骤:
- 确保本地分支已经跟踪了远程跟踪分支
- 拉取数据:git pull
- 上传数据:git push
push错误的时候,可能原因:把windows凭据关于github的删除。
一个本地分支怎么去跟踪一个远程跟踪分支:
- 当克隆的时候,会自动生成一个master本地分支(已经跟踪了对应的远程跟踪分支)
-
在新建其他分支时,可以指定想要跟踪的远程跟踪分支
git checkout -b 本地分支名 远程跟踪分支
git checkout --track 远程跟踪分支
-
将一个已经存在的本地分支 改成一个跟踪分支
git branch -u 远程跟踪分支
冲突
- git 本地操作会有冲突(典型合并的时候)
- git 远程协作的时候可能有冲突(push,pull)
四、Git 分支
分支的本质 就是一个提交对象!里面存放着提交对象的哈希。
HEAD:是一个活动的指针,它默认指向master分支,切换分支时其实就是让HEAD指向不同的分支,每次有新的提交时,HEAD都会带着当前指向的分支一起移动。
创建分支:
在当前提交对象上创建分支
git branch name
在指定的提交对象上创建新的分支
git branch branchname commithash
创建分支并且切换过去
git checkout -b 分支名
相当于
git branch 分支名
git checkout 分支名
切换分支:
git checkout name
切换分支会动三个地方:HEAD, 暂存区, 工作目录(的文件)。
坑:
在切换分支的时候,如果当前分支上有未暂存的修改(第一次),或者有为提交的暂存(第一次),分支可以切换成功,但是这种操作可能会污染其他分支。
最佳操作:
每次切换分支前,当前分支一定得是干净的(已提交状态)。
查看分支:
显示分支列表 git branch
查看分支 git log --decorate
查看分支 git log --oneline
查看完整分支情况 git log --oneline --decorate --graph --all
查看分支指向的最新的提交 git commit -v
删除分支:
要先切换到主分支,才能删除想删除的分支
删除分支(可以删除已经合并的分支) git branch -d name
强制删除分支 git branch -D name
合并分支:
合并前要先切换到主分支,然后 git merge 分支名
快进合并,不会产生冲突
典型合并,可能产生冲突
解决冲突:打开冲突的文件,进行修改,add commit
Git存储:
在分支上的工作做到一半时,如果有切换分支的需求,我们应该将现有的工作存储起来。
git stash: 会将当前分支上的工作推到一个栈中
分支切换,进行其他工作,完成其他工作后,切回原分支
git stash apply:将栈顶的工作内容还原,但不让任何内容出栈
git stash drop: 取出栈顶的工作内容后,就应该将其删除(出栈)
git stash pop: git stash apply + git stash drop
git stash list :查看存储
Git后悔药:
撤销工作目录的修改: 如何撤回自己在工作目录中的修改 git checkout – 文件名(有空格)
撤销暂存区的修改: 如何撤回自己的暂存 git reset HEAD 文件名
查看暂存区有哪些文件: git ls-files -s
查看暂存区某个文件中的内容:git cat-file -p 哈希值
撤销提交(版本区): 如何撤回自己的提交
(1)注释写出了 git commit --amend 打开去修改 注释
(2)内容写错的话,修改内容重新提交一次就可以了。
reset三部曲:
git reflog : 只要是HEAD变化,那麼git reflog就會記錄下來
第一部 : git reset --soft HEAD~ (HEAD~就是一个commithash)
只动HEAD(带着分支一起移动)
(用commithash的内容重置HEAD内容)
第二部 : git reset [–mixed] HEAD~
动了HEAD(带着分支一起移动)
动了暂存区
(用commithash的内容重置HEAD内容,重置暂存区)
第三部 : git reset --hard HEAD~ (危险操作)
动HEAD(带着分支一起移动)
动了暂存区
动了工作目录
(用commithash的内容重置HEAD内容,重置暂存区,重置工作目录)
checkout深入理解:
git checkout commithast & git reset --hard commithash
共同点:都需要重置HEAD 暂存区 工作目录
区别:
- checkout只动HEAD;–hard动HEAD而且带着分支一起走
- checkout对工作目标是安全的; --hard 是强制覆盖工作目录
checkout+路径
git checkout – filename
重置工作目录
git checkout commithash filename
重置暂存区,重置工作目录
创建feature分支之后,就在分支内建立文件(所有操作都在分支进行)
echo “damu.text v1” > damu.txt
git add damu.txt
git commit -m ‘来了大目’
git log --oneline 查看分支情况
git log --decorate 也可以查看分支情况
git status 查看状态,在分支feature上
五、分支实战
- git branch -f master 让master到 c6
- git branch -f bugFix HEAD~1 让bugFix相对于HEAD移动1步