关于git的在这里就不做过多的介绍了,大家只要知道git目前在软件行业很受欢迎,是一个分布式项目管理工具,知道这些就可以了,当然你要问我什么是分布式?这个你可以通过很多中方法了解到的,如果以后的博文中会遇到再做介绍。
好了,虽然这么说,但是简单的介绍还有应该有的,以方便我们开始正文
git简介
1. Git是目前世界上最先进的分布式版本控制系统(没有之一)
2. GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别
安装git
- 如果您使用的是Linux系统,你可以使用
sudo apt-get install git
来完成git的安装,老一点的Debian或Ubuntu Linux,要把命令改为sudo apt-get install git-core
- 如果是在window下,直接去官网下载安装文件,安装完成后使用
git --version
命令查看是否安装成功
创建仓库
先创建一个文件夹,使用git init
来初始化仓库,创建完成之后发现文件夹下边多了一个.git的文件,这个文件是用来保存相关配置的
提交文件
1. 文件准备,我们先创建一个txt文件并编辑相关的内容
2. 使用git status
查看与版本库之间的区别
从图中可以看到1.txt文件是新增的,提示我们使用git add
来提交
3. git add
提交代码
git add 命令是将目前的代码添加到一个暂存区中,并为真正放到仓库
4. git commit -m ''
提交代码
如果是首次使用提示我们设置账号和密码
设置账号并提交代码,提交完之后代码已经添加到仓库,如果已经关联远程仓库,需要用git push
来推送到远程仓库
版本回退
1. 我们对1.txt文件进行多次改动并提交
2. 使用git log
查看提交记录
添加参数pertty=oneline可以简化提交日志信息
每行记录的最前边的那个字符串为head,也就是版本号,现在我们最新的版本为boss is a big….我们回退到boss is a good man这个版本
工作区和暂存区的理解和相关操作
1.
工作去表示本地的代码。暂存区表示已经进行了add操作的代码。
2. git checkout -- file
丢弃工作区的修改
3. git reset HEAD <file>
可以把暂存区的修改撤销掉(unstage),重新放回工作区
分支管理
1. 在版本回退里,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点.
2.git branch
查看当前分支
3.git checkout -b ''
创建并切换到新的分支
4. git checkout
检出并切换到分支
5. git merge branch
合并分支,创建dev分支并将dev分支合并到master
解决冲突
在团队开发中,代码冲突是经常出现的事情,接下来就教大家怎么 解决冲突。
在企业开发中,master一般为稳定的分支用来上线,dev为开发分支,所以我们开发人员都是在dev上创建自己的开发分支
1. 基于dev创建dev1和dev2分支,然后是1.txt文件中的内容冲突,编辑同一行代码即可。
先把dev1的代码合并到dev
再合并dev2
fix conflict s and commit result提示我们解决冲突并提交代码
在这个图中<<<<<和>>>>>之间的内容为发生冲突的内容
2. 解决冲突
修改冲突部分内容并提交代码并提交
远程仓库管理
1.当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。要查看远程库的信息,用git remote
如果首次使用并未关联git远程仓库,可以先在GitHub注册账号,创建一个新的仓库,创建完之后可以看到关联本地代码的提示
1. 然后关联远程仓库
点击仓库地址的ssh,拿到ssh地址复制,在本地执行git remote add origin git@github.com:lizy928/myproject.git
然后执行 git push -u origin master
如果出现以下错误
这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,现在使用ssh-keygen -t rsa -C 'youname'
来生成ssh公钥
查看生成的ssh公钥
复制ssh公钥
点击设置添加ssh-key
添加完成
2. 然后将本地代码推动到远程
3. git clone git地址 可以克隆远程项目代码
分支管理
1. 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
下面我们实战一下--no-ff
方式的git merg
e
2. 在dev分支上创建dev3分支,修改1.txt文件并提交
远程协同开发
git remote
查看远程仓库信息git remote -v
查看详情、
$ git remote
origin
lizy@ck MINGW64 /e/gitRep/test (dev)
$ git remote -v
origin git@github.com:lizy928/myproject.git (fetch)
origin git@github.com:lizy928/myproject.git (push)
lizy@ck MINGW64 /e/gitRep/test (dev)
3 . git push origin master
远程推送,将master分支推送到远程,把master和dev都推送到远程
$ git push origin master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 268 bytes | 268.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:lizy928/myproject.git
1b90ff6..b7fc5af master -> master
lizy@ck MINGW64 /e/gitRep/test (dev)
$ git push origin dev
Enumerating objects: 18, done.
Counting objects: 100% (18/18), done.
Delta compression using up to 8 threads.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (16/16), 1.20 KiB | 613.00 KiB/s, done.
Total 16 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), done.
To github.com:lizy928/myproject.git
3. [new branch] dev -> dev
lizy@ck MINGW64 /e/gitRep/test (dev)
4.在开发中团队成员都会随时向远程仓库推送自己的代码,因此出现冲突的纪律也是比较大,接下来就讲解演示一下如何解决这种场景下的冲突。
- 假如你的同事在dev分支下修改一个2.txt的文件,提交并推送到远程
lizy@ck MINGW64 /e/gitRep/test (dev)
$ git push
fatal: The current branch dev has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin dev
lizy@ck MINGW64 /e/gitRep/test (dev)
$ git push --set-upstream origin dev
Warning: Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 268 bytes | 268.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:lizy928/myproject.git
3c49854..01b60aa dev -> dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
lizy@ck MINGW64 /e/gitRep/test (dev)
将编辑完成的代码推送到远程
如果此时你也对这个文件做了一些修改也要推送到远程
$ cat 2.txt
env
$ git add 2.txt
$ git commit -m "add new 2.txt"
[dev 7bd91f1] add new 2
1 file changed, 1 insertion(+)
create mode 100644 2.txt
$ git push origin dev
To git@github.com:lizy928/myproject.git
! [rejected] dev -> dev (non-fast-forward)
error: failed to push some refs to 'git@github.com:lizy928/myproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
推送失败,出现代码冲突,Git提示我们,先用git pull把最新的提交从dev抓下来,然后,在本地合并,解决冲突,再推送:
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> dev
git pull失败根据提示执行
$ git branch --set-upstream-to=dev dev
Branch 'dev' set up to track remote branch 'dev'
再执行git pull
$ git pull
Auto-merging env.txt
CONFLICT (add/add): Merge conflict in env.txt
Automatic merge failed; fix conflicts and then commit the result.
修改完冲突的代码之后在进行提交
$ git commit -m "fix env conflict"
[dev 57c53ab] fix env conflict
$ git push
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 621 bytes | 621.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To git@github.com:lizy928/myproject.git
7a5e5dd..57c53ab dev -> dev
其它常用命令
git push -u origin master //将本地代码推送到远程仓库
git fetch //更新所有的远程仓库包含的分支的最新代码
git checkout head . //本地仓库代码完全覆盖本地工作区间
git stash //将本地修改放入缓存区
git stash pop //取出本地修改的代码
本次教程到此结束,谢谢阅读