适合初次使用git的详细教程和idea的结合使用

温馨提醒:本教程巨长,最好跟着做,单看不跟着练习操作容易睡着(新手来说)

一:上传项目到github

首先是git软件的安装,git 官网下载链接 ,然后是安装,全部下一步下一步就好了。这里就不赘述了

在idea上面配置好你的git,files->settings->Version Control->Git->Path to Git executable: 设置为安装git中所安装的git.exe

码接下来为github设置账号密码:files->settings->Version Control->GitHub->Create API Token



设置好了之后,IDEA的git准备工作就做好了。

然后在github上面新建一个仓库

创建完成后如下

接下来我们用idea创建一个hellogit的Java project,如果不会,那么请自行百度用idea创建一个简单的Java Project

创建完成后,点击VCS--import into Verdion Control--Create Git Repository。

选择你的项目hellogit

填入 你的github刚刚创建的地址

就是这个

然后右击你的项目,找到git然后点击 +add 然后你会发现你的文件变绿色了,接下来就点击Commit Diretory

接下来就去github上面看看你的项目是不是已经上传了

二:接下来我们不依赖idea的git工具,我们用git命令的方式。

git安装好了之后,在c盘或者其他盘符创建一个文件夹,比如git

然后在git文件夹里面右击鼠标git bash here

好了接下来就是重点了。

三:初级应用

【1】下载项目

你的项目github上的下载地址图示

git clone https://github.com/JohnBarrowman65/hellogit.git(你的githubi项目https下载链接)

然后git 目录下就能看到你在github上的项目已经被下载下来了。

定位到hellogit文件夹右击git bash here

【2】查看日志

git log

查看到我们在上传项目的时候的提交日志,记住git log 后的第一行提示信息,有一个commit 后面一串字符串(SHA-1 校验和) 后面跟着括号,括号里面的HEAD ->master这些信息。。后面有讲到这些都是什么东西。

【3】在src目录下随便新建一个文件,比如新建一个gitcommit.java文件,然后查询

git status

status是用来查询当前工作目录的状态的,如图

“皇家“信息翻译:

(1)On branch master --说明你是在一个叫master  的branch(分支)上。我们新建项目的时候,默认都是有一条主线master(也叫主分支)的。

(2)Untracked files --未追踪的文件gitcommit.java,git还给你一个温馨提示git add <file>可以把文件加入到暂缓区

【4】添加入staging area 区

git add .
#如果是你删除了一个文件,用这个
git rm .

看清楚了后面有个点,enter后再git status看下,发现new file:xxx.java了,说明文件已经被记录进了 staging area(暂存区)

【5】提交

git commit -m ‘备注信息’

然后再git log一下,可以看到我们刚刚commit的记录信息

这个时候commit只是commit到我们本地的仓库,远程仓库你去看还是没有提交的。

这里涉及到git这个分布式中央仓库的理论基础知识,也是跟svn这些单中央仓库一个很大的不同的地方。git你clone项目的时候不仅是下载下远程仓库的东西,还会在你自己电脑本地创建一个本地仓库,你无需联网就可以自己写自己的东西,由于可以提交到本地,所以你可以分步提交代码,把代码提交做得更细,而不是一个提交包含很多代码,难以 review 也难以回溯。

【6】push到中央仓库

git push 

这个时候github上就能看到我们的提交的东西了

【7】上面的情况是单单一个人的,然后一个项目往往都是好几个人一同操作的,所以我们本地模拟下你的同事

切换回git主目录再clone下一个项目并另起一个名字区别假装是你的同事。注意 不用怕冲突,因为git是以文件为区分管理的

git clone https://github.com/JohnBarrowman65/hellogit.git anotherhellogit(同事的文件名)

切换进入anotherhellogit文件夹,打开git bash here,接下来还是一顿简单的操作新增文件然后提交最后push

同时github上面能看到刚刚同事上传的文件了

接下来就是你要下载下同事的文件下来了,切换回你的目录

 git pull

然后你可以看到你的文件夹里面也已经有同事提交的东西了。

【8】push冲突了

(1)写完所有的commit后,不用考虑中央仓库是否有新的提交,直接push

(2)如果 push 失败,就用 pull 把本地仓库的提交和中央仓库的提交进行合并,然后再 push 一次

到此为止,这个工作模型已经是一个最简单的可用的工作模型了。这个工作模型已经可以让团队用来合作开发了。

------------------------------------------------------------分割线--------------------------------------------------------------------------

三:接下来探讨下我们前面留下的坑,HEAD->master,commit,等具体的实际意思

【9】HEAD当前commit的引用,你的一次更新改动commit到仓库后就算一次commit,每当有新的commit后,HEAD自动与其对应,commit本身有后面一串很长的SHA-1来标识。总之,当前commit在哪里,HEAD 就在哪里,这是一个永远自动指向当前commit的引用,所以你永远可以用HEAD来操作当前commit。

【10】branch分支,mseter也是一个分支,不过是指主分支,git上默认分支就是master

新建分支叫做branch1并切换到branch1的分支

git checkout -b branch1

注意master和branch1是平等的

删除分支,删除远程仓库分支

#删除分支
git branch -d branch1
#删除远程仓库分支
git origin -d branch1

【11】merge合并分支到主线上。

上面我们刚刚创建了一个branch1的分支,假如我们在这个分支里面新增了文件,还是一顿操作

然后再上传分支到git远程仓库上面

git push origin branch1

接下来注意先切换回master主线,这个时候最好git pull一下(这其实是pull操作的一种经典情形:本地的master没有新提交,而远端仓库中有同事提交了新内容到master),然后再合并分支branch1

git checkout master #切换到master主线
git pull #更新下
git merge branch1 #合并分支

最后就是git push上去就可以了,这个时候我们就可以在github上面看到我们刚刚新增的branch1分支中添加的东西了

【12】merge冲突

当你在合并分支的时候有可能回出现冲突,比如你在这个分支中修改了a,另一个分支中修改了b,那么合并后就是既改 A 也改 B,这个动作会自动完成;如果两个分支都改了同一个文件,但一个改的是第 1 行,另一个改的是第 2 行,那么合并后就是第 1 行和第 2 行都改,也是自动完成。但是你的两个分支改了相同的内容,Git 不知道应该以哪个为准,如果在merge的时候发生了这种情况,Git 就会把问题交给你来决定。那么你现在需要做两件事:解决掉冲突然后手动commit一下放弃解决冲突。

取消merge用的命令是git merge -abort

-------------------------------------------------------分割线--------------------------------------------------------------------------

接下来说下最常用的工作流模型,也是很多公司用的(听说)

这种工作流的核心内容可以总结为两点:

任何新的功能(feature)或 bug 修复全都新建一个 分支来写;分支写完后,合并到主线,然后删掉这个分支。

打个比方,对于hellogit这个项目,你需要完成里面的论坛功能,那么你就自己新建一个bbs的branch,写好后提交到中央仓库,给经理或者其他同事看下确认没问题了,你再最后确认合并到主线上。

【13】Feature Branching工作流

#创建分支     
git checkout -b xxx
#提交东西     
git add .   
git commit -m xxx(提交备注说明)
#上传分支     
git push origin xxx
#切换分支     
git checkout master
#更新本地仓库跟中央仓库的master一致     
git pull
#合并分支     
git merge xxx 
#提交到中央仓库      
git push
#删除本地分支          
git branch -d xxx
#删除远程仓库分支   
git push origin -d xxx

这个时候可以通知你的同事或者上级查收下你的代码,我们切换到一开始创建的你的”同事“

git pull
git chekcout bbs

如图就是我上传的bbs功能,你同事那里也能看到了,确认没问题后,你就再合并分支然后上传到中央仓库

git merge bbs
git push
git branch -d bbs
git push origin -d bbs

这个时候可以上去看看github上面是不是已经存在bbs的功能代码了

同时为了不必要留下很多分支,建议你同时删除本地和中央仓库的bbs分支

用这种方案去工作还有个好处就是多任务的支持,很多时候你的任务时一起来的,你就可以同时建立多个分支,这个做完可以切换到另一个继续做。

-------------------------------------------------分割线-------------------------------------------------------------------------------

四:高级应用

【14】merge换成rebase的操作

#新建并切换到新增的分支        
git checkout -b rebasebranch

#这里就写你的功能啦.......

#变基(衍合)
git rebase master

#在rebase之后,切回master再merge一下,把master移到最新的commit

#切换分支       
git checkout master

#合并分支       
git merge rebasebranch

如图:先新增了分支,然后提交到了中央仓库

然后使用rebase合并分支,最后push上到项目中。这样也能实现分支的合并

注意:一般不要从master向其他branch执行rebase操作

五:高级应用修改commit
先在本地对需要修改的文件进行修改

--git add xxx(修改了的文件名)

--git commit -amend

commit-amend是用在修改当前commit的,那要是发生在前一个commit呢?用rebase

首先先定位到你需要修改的commit前,用

git log

如上图,我想修改的提交备注为”修改gitcommit文件“那一行的commit

那么我可以这样

git rebase -i HEAD^^

在弹出的编译页面选择你需要修改的commit,把最前面的pick改为edit退出后就停留在你需要修改的commit了

这个时候就能继续你的修改东西的操作了

git add xxx(修改了的文件名)

git commit -amend

在修复完成之后,就可以用git rebase --continue来继续rebase过程,把后面的commit直接重新连接起来并应用上去。

最后写好了也可以push上去到中央仓库。

六:高级应用撤销commit

git reset --hard HEAD^

前面的操作也是用于撤销最新的commit的,但是如果是前面几个,那么reset--hard就用不了,这个时候用交互式rebase撤销commit

git rebase -i HEAD^^

这个时候又弹出一个编辑框了,你只需要删除你想要撤销的commit上的那一行就可以了。

当然是发生在前面所有的前提都是在内容未push前的。如果是push后的,并且是在你自己未合并到master主线上的分支,那么你也可以更改然后强制push上去

git push origin branch1 -f。

记住假如你的分支已经合并到master那么千万别强制push了,不然覆盖掉之前人家提交的,你会被打的。这个时候你就要用revert了。它的用法很简单,你希望撤销哪个commit,就把它填在后面:

git revert HEAD^

本地做完提交后再push就可以了

七:高级应用stash

临时存放工作目录的改动,当你某个功能还没写好没commit的时候,你不必急急忙忙commit上去,再去切换分支做别的紧急的事情,可以直接

git stash -u

做完紧急的事情后你再返回来做你的功能

git stash pop

这样你之前存储的东西又都回来了!

八:高级应用reflog

找回误删除的分支

git reflog

 这个命令可以找到HEAD的移动记录,找到你想要找回的分支当时commit,切换到它,比如说branch1我要找回它

那么我就切换到它

git checkout branch1
git checkou  -b branch1

这样你刚删除的分支branch1就找回来了。

九:高级应用排除不想被管理的文件和目录

.gitignore文件

创建仓库的时候github上面有模板让你选择,自动生成相应的.gitignore文件

写这个教程花了我整整一天的时候,各位看官如果觉得有帮助请点个赞谢谢,文中如果有出错的地方,欢迎有老司机指正

猜你喜欢

转载自blog.csdn.net/S_body/article/details/83817722