git和Github(这里用码云代替)

我们在学习Git之前,我认为先搞清楚Git可以做什么是很重要的。以下就是Git的用途。

1.解决代码被误删的可能。我们的代码是存储在硬盘上的,所以是有被误删的可能的,而在Git这个版本控制系统中,他会把代码推送到远端仓库进行管理,防止误删。

2.版本持续变化,需要对多个版本进行处理。

3.方便多人协作

Git和Github的区别

Git:版本控制工具(同类工具:SVN,hg,vsc...),本质上不依赖任何第三方网站,但配合Github效果更佳。

Github:全球最大的IT社区。(全球最大的同性(程序猿)社交网站)由于在国内访问的话速度会比较慢,所以选用码云配合演示下Git。(都可以托管自己的代码,并提供给别人阅读,达到交流的目的)。 

下来我们就来看看Git的基本操作(我用的是centos7,yum 源安装。如果有朋友用的是centos 6的版本,那么可能需要源码安装)

1.git   clone    URL   把码云上的项目克隆到本地。

(1)现在码云上建立一个文件。点击加号—-》新建—-》点击克隆下载复制HTTPS——》在命令行输入git   clone    URL  

现象是发现这个目录下多了一个文件(本来是码云上的文件)

2,这里我们要把本地的代码向码云提交,分为三步

这是我提前准备的文件,也就是要提交的文件。

cd   test-Git

touch  test.c

(1)git  add   文件名:告诉哪些文件是需要进行版本控制的。

(2)git commit  .  把修改后的当前目录下的所有文件提交到本地,(虚拟机凉了,代码依然会凉)。回车后会出现一个提交信息(相当于提交的时候有了一个预览),并提交的时候需要写一个比较有描述性的日志信息。(一定要写,且认真写!!!!!)。刷新码云,这时可以看到仍然没有看到test.c,所以说明提交并没有同步到服务器上去。

(3)git     push   服务器的同步,

3 其余指令

git   pull :在码云上修改之后,在本地敲下这个指令时,会使本地的文件同步修改。

git   diff:可以看到本地还没有提交的版本中,发生的变化,也就是提示发生的改动.

git   status:查看哪些代码发生了修改。(不包含详细信息)类似上条

git   log :实例,先对  先git    commit   .提交一下改动的信息,在vim中写上日志,保存,再敲下git   log   作用,查看版本日志。

4.配置忽略文件.gitignore,内容如(指定要忽略的内容,如编译出的.o可执行文件)*.o。

在告诉哪些文件是需要进行版本控制的时候就不会有.o文件了。

5.版本回退:

(1)git   log   查出版本信息(版本日志)由于信息较多,略显杂乱。

,git   log   - -pretty=oneline

回车后,一行版本号+一行日志

下面就要开始回退了

git   reset  —hard    版本号

下面回复一下

git   log   - -pretty=oneline

发下最新的版本没有了,这时怎么办呢?

git  reflog:记录了我们在本地上的所有核心工作,来找git   log上的不再显示的版本号。前面是版本号,后面是说明。

6.分支,产生分支的目的是为了团队的协作,不会因一个人的错误,影响团队的开发。如甲在开发代码时,基于服务器上的这一份代码,创建一份分支(对服务器上的代码拷贝一份),甲自己创建的这个分支称为开发分支(dev),服务器上原来的这份代码称为主线(master),后续甲把代码提交到dev分支上,不会对master进行任何影响,知道代码开发完,测试完,再把dev分支的代码合并到master上。

(1)git   branch(分支):

完成对分支的操作。不加其他参数,查看当前本地有哪些分支(注意是本地)(*在哪个分支上,我们就工作在那个上面)。

加上分支的名字,在本地(码云上不会显示)创建一个指定名字的分支。

-d 分支名字,删除分支

(2)git    checkout  分支名   调整工作分支,这之后我们就会在这个分支中工作。

-b 选项,创建分支并切换到新分支。

(git    checkout   -b    dev      创建并切换到dev分支)

(3)git   merge   分支名

会合并分支也就是把dev上的改动,合并到merge上。

(4)删除分支

git   branch   -d   分支名(虽然还是可以找回但还是要确定合并后再操作)

(5)合并时的重要问题:冲突,

例如:在同一个位置的代码,在不同分支中都被进行了修改,此时尝试merge两个分支,就会产生冲突。

在master也修改了main.c 在最开始的地方新增了一行代码printf (“hehe\n”);

在dev 分支中修改了main.c,在最开始的一行代码中printf (“haha\n”);

解决方法merge后打开vim手动修改master中合并的文件,再次强制提交git   commit   -a   

场景一:

假设你在开发一个需求时,马上要开发完了,产品经理说,这个需求不用做了。此时修改的代码,不用合并到master分支中,用过的分支可以删除,但这是如果直接用git    branch -d 会报错,提示

还没有没有合并到master分支中操作不可以进行,这时我们应用git   branch  -D    强制删除一个没有merge 过的分支。

场景二:

多人合作开发

1.直接基于master来开发(实际工作中,严格禁止)

pull—->merge/解决冲突——->commit——->push 

先拉取代码,有冲突的话解决冲突,解决之后再提交代码。

场景三

开发一个功能,创建dev分支,在这个dev分支上开始开发。

开发到一半时,master上发现了一个bug,需要立刻修复。

(不可以把开发一半dev(如没有测试,可能有故障)合并到merge,在多人时,如有bug其他人将不可以工作)

如果直接切换是切换不到master上的,由于当前代码修改了,但是没有提交。此时切换不到。

git   stash   把分支中修改的代码保存,并使新改的代码就没有了,恢复成修改之前的。这时就可以正常的切换了(git    checkout    ())处理完后git stash   pop恢复

git   stash   list,存储列表。

场景四,多人在分支上直接开发

首先,可以试图用git push origin branch-name推送自己的修改

如果推送失败,则因为远程分支比你的本地更新(也就是有别人改过),需要先用git pull试图合并; 如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令

git branch --set-upstream origin/branch-name  branch-name (具体看你的git如何提示) 这就是多人协作的工作流程。

以上是常出现的情景,下面我们讲最后一个问题

标签管理  tag

需要对代码进行发布版本的管理,实用标签机制告诉我们那份代码是需要发布的。一般不会直接发布master上的最新代码。

git   tag   v1.0   创建了一个标签名为v1.0

git   tag  查看目前有什么标签名

用git log 查出想发布的标识符。

git    tag    -a   v1.1   文件标识符,这时回车,可以在出现的页面写日志,注意这时还是在本地的

我们把它推送到服务器上。

git     push   origin  v1.1:

下面我们来演示一下删除标签

git    tag    -d     [标签名]

删除服务器上的标签:要尽量避免。

猜你喜欢

转载自blog.csdn.net/a15929748502/article/details/82998007