本教程教你从头到尾你操作一遍git,你只需按照步骤进行就好,请你事先准备好一个gitee账号,创建好一个git仓库。
前言:git的操作的几个方面
- 仓库操作
- 分支管理
- 解决冲突
- 版本的回退和前进
仓库管理
本地有项目,关联到远程仓库
- 打开终端,window打开git bash,进入你想要创建项目的目录或者已将创建项目的目录,执行一下命令。
- git init 初始化git仓库
- git remote add origint https://gitee.com/huruqing/gitdemo.git 关联远程仓库(地址换成你自己的就行)
- git add . 把所有文件添加到版本里
- git status 查看状态
- git commit -m'备注信息' 提交修改
- git commit -a -m"备注信息" add和commit连着写
-
git push origint master 会出现下面的错误提示
一般是由于远程仓库上有内容,解决的办法有两种:
git push origin master -f
本地强制上传到远程,把远程的覆盖
git pull --rebase origin master
拉取远程的文件把本地的覆盖,再上传 - git push origin master -u 加上-u后面再提交只需要git push就可以了,不需要再加上分支名称
本地没有项目
- git clone https://gitee.com/huruqing/gitdemo.git@git 把远程的仓库克隆到本地。
- 进行像上面的那些仓库操作,不过首次提交的时候就不需要加 -f,因为你是直接clone的项目
其他操作
- git remote remove origin 取消远程仓库关联
- rm .git -rf 删除仓库
分支管理
- git checkout -b dev 创建并切换到dev分支
- git branch查看分支
- git checkout master 切换分支到master
- git merge dev -m"合并分支到主干" 合并分支dev到master
- 把主干代码同步到分支
- git checkout dev 切换到分支
- git merge master -m"合并主干到分支"
- 如果出现 fatal: refusing to merge unrelated histories,意思是这两个分支没有共同的祖先,需要这样去合并或者拉取
git merge dev --allow-unrelated-histories
- git branch -a 查看所有分支
- git fetch origin dev:dev 把远程分支dev同步到本地分支dev
- git branch -d dev 删除dev分支
- git push origin -d dev 删除远程的dev分支
冲突处理
由于多人同时进行开发,有时候会同时修改一个文件,或者多分支开发,合并的时候就很容易引发冲突,下面是一个制造冲突和解决冲突的例子。
- 为了方便我们看得清楚,把所有内容删除
- 在master分支,创建index.js
// index.js
// 创建对象
function Person(name, age) {
this.name = name;
this.age = age;
}
var p = new Person('张三丰',100);
- git checkout -b dev 创建分支dev ,这时候主干和分支的代码都是一样的
制造冲突
- 把分支上的代码改成下面这样子,然后提交并推送
// 工厂模式
function Person(name, age) {
var obj = new Object();
obj.name = name;
obj.age = age;
return obj;
}
var p = Person('张三丰', 100);
- 把主干代码修改成下面这样子的,然后提交并推送
// 创建对象
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.say = function() {
console.log(this.name);
}
var p = new Person('张三丰',100);
- 合并dev分支到主干 git merge dev -m"xxxx"
- 冲突出现,代码如下:
// 工厂模式
function Person(name, age) {
var obj = new Object();
obj.name = name;
obj.age = age;
return obj;
}
<<<<<<< HEAD
Person.prototype.say = function() {
console.log(this.name);
}
var p = new Person('张三丰',100);
=======
var p = Person('张三丰', 100);
>>>>>>> dev
其中<<<<<<< 和 =======之间的代码是当前分支(也就是master分支)的修改,=======和>>>>>>>之间的代码是dev分支上的修改
我们需要根据我们自己的情况去消除冲突,我们可以选择保留主干上的修改或者是分支上的修改。消除冲突之后,再执行添加、提交、推送的动作。
版本的前进和回滚
-
git log 和 git log --pretty=oneline 查看版本信信息
- 如果我们要回退到aaa这次操作提交上来,我们只需要将id复制一下,然后执行下面命令即可,版本的id每个人都会不一样
git reset --hard e55640863f0eb141e0857761f0268c61121c07ac - 版本回退之后,如果想再回到现在,你只需要记住你要回到的id即可使用同样的命令回到现在
- 如果不记得版本id,还可以使用git reflog来查看你提交的历史记录,从中找到版本的id,再进行reset操作
其他
每次git push我们都需要输入账户密码比较麻烦,想要免掉这一步,请看文章
码云gitee添加公钥