关于git的学习

没工作之前一直都有一个疑问:公司里面那么多人都在做开发,最后代码是怎么合一起的?还有代码交付由谁管理?现在接触到代码管理工具就解决疑问了。目前接触到的代码管理工具有svn,git。

git和svn的区别

1.git是分布式的,svn是集中式的。

svn必须有一个服务器版本库就放在一个中央服务器,所有开发人员都是与服务器进行交互的。

git更倾向于分布式开发,每台计算机上都有一个完整的本地版本库,和服务器一模一样。

2.git把内容按元数据方式存储,svn按文件

3.分支不同。

svn创建分支,是创建了一个新的文件及及文件的。创建完分支后,影响全部成员。

git开启分支,并没有创建文件夹,只是多了一个索引文件,记录这个分支的变化。用户想在这个分支里做什么都可以,对其他分支没有任何影响。比较适合多分支并行开发。

参考https://www.cnblogs.com/baby123/p/10411103.html


 首先安装git之后,就可以从服务器上拉取代码。作为初学者,这也是踩过坑的。拉取代码之后,这个分支属于branch,然后需要更改分支更新代码才能使用。最开始我不懂这个分支到底什么意思,然后在网上看了几个人写的博客,现再整理一下git分支。

git分支

分支的创建本质上只是创建了一个指向提交对象的指针。开发任务都是并行开发的,所以每个分支都是重新创建一个新环境来写的,分支之间是互不干扰的,直到把这些合并到master主干上。

如图,假设写了第一个版本的代码V1,然后又写了第二个版本的V2,那么v2保留的内容是相对于v1新加的内容,他们之间的关系是V2指向V1,这一条线叫主干master。

在v2的基础上新增功能G1,那么可以在V2上创建G1分支,再创建G2分支来新增功能,这时G1和G2没有交涉,最后确定G1和G2完成之后,再合并到主干master即可。

参考https://www.cnblogs.com/missdx/p/12343771.html


git基本使用

以该图为例,Git pull从服务器拉取最新代码,Git Fetch从服务器拉取最新分支,git push是将本地代码提交到远端。

1.将本地代码提交到本地仓库。

选择git commit->master ,提交备注message(不填写不准提交),勾选需要提交的文件,点击commit,即可将本地代码提交到本地版本库。

2.查看日志

右键TortoiseGit->show log。在日志中,可以查看提交记录。比如,提交人,提交时间,提交了什么文件等等。

3.分支合并

如果希望将newbranch分支能合并到master,右键选择TurtoiseGit->Merge,选择被合并的分支。

4.拉取远端最新的修改内容

右键->git pull,点击确认即可(不要选择master主干,要选分支)

参考https://www.cnblogs.com/xuwenjin/p/8573603.html

5.commit和push的区别

commit操作的是本地库,push操作的是远程库。


 git解决代码冲突

 1.git冲突的情景

情景一:多个分支代码合并到一个分支时;

情景二:多个分支向同一个远端分支推送代码时。

git的合并中产生具体冲突的情况:

(1)两个分支中修改了同一个文件

(2)两个分支中修改了同一个文件的名称

2.冲突解决方法

情景一:修改冲突代码->add->commit

情景二:修改冲突代码->add->commit->push

git add 命令可将该文件添加到暂存区。

3.例子

(1)情景

本地库中两个分支,修改同一文件同一代码块,两分支先后将修改提交到master,master在合并第二个时,会显示代码冲突。

(2)本地库

在master分支建立一个mergeTest.txt,并在文件中添加“Hello master branch”内容

新建aBranch分支,修改文件内容“Hello master -aBranch branch”

新建bBranch分支,修改文件内容“Hello master -bBranch branch”

(3)合并分支产生冲突

切换到master分支,合并aBranch分支,会成功合并

合并bmaster分支,产生冲突

注:
git merge:默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将Master分支指向Develop分支。
使用--no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,建议采用这种方法。

(4)解决冲突

在当前分支上(master),找到冲突文件,直接修改冲突代码,add,commit

参考https://www.cnblogs.com/gavincoder/p/9071959.html


 再总结几个命令:

git stsh:备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区和上次提交的内容一致。同时将当前的工作区内容保存到git栈中。

卑微打工人要提交作业了~

原文地址:https://www.cnblogs.com/-2016/p/13927022.html