目录
1.概述
2.特点
3.Git和SVN比较
4.Git使用
4.1下载安装
4.2git命令的使用
4.2.1. 初始化操作
4.2.2. 创建本地仓库
4.2.3. 版本回退
4.2.4. 撤销修改
4.2.5. 删除版本库文件
4.2.6. 远程仓库
4.2.7.分支操作
4.2.8. 保护工作现场
4.2.9. 标签管理
4.2.10. 忽略特殊文件
4.2.11. 配置别名
4.2.12. 企业开发使用步骤
4.3.git工具的使用
4.3.1. 提交本地仓库到远程仓库
4.3.2. 下载项目
4.3.3. 提交已经修改的项目
4.3.4. 切换分支
4.3.5.还原文件或项目
4.4.Git冲突解决
5.Git工作流程图
6.Git版本管理流程
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库(本地仓库),开发者可以提交到本地,实现离线开发。
1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
3、在单机上自己创建的分支上提交代码。
4、在单机上合并分支。
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6、生成补丁(patch),把补丁发送给主开发者。
7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
1. git比svn快,用起来更流畅。
2. git在本地就可以用,可以随便保存各种历史痕迹,不用担心污染服务器。svn commit就到服务器了,有时候发现commit错了或不全就得再来一遍,有review更吐血了。(git commit --amend太好用了)
3. git拉branch和在branch之间切换都非常简单,可以随便折腾。svn一个branch就是一个copy。
4. git绝对不会有被lock了不能commit的情况。
5. git可以实现离线工作,svn不能连接到服务器上基本不能工作
6. svn一致性非常高
Git安装很简单,可参看百度教程git下载安装图文教程
4.2.1.1. 绑定用户
打开git-bash.exe,在桌面快捷方式/开始菜单/安装目录中
因为Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识,用户和邮箱为你github注册的账号和邮箱
ps :git config --global 参数,有了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然你也可以对某个仓库指定的不同的用户名和邮箱。
4.2.1.2. 为github账号设置SSH key
配置ssh的好处就是,本地向服务器push代码时就不用总是填写用户名和密码了
如果你的key丢失了,不管是公钥还是私钥,丢失一个都不能用了,解决方法也很简单,重新再生成一次,然后在github.com里再设置一次就行
2-1 生成ssh key
首先检查是否已生成密钥 cd ~/.ssh,ls如果有3个文件,则密钥已经生成,id_rsa.pub就是公钥
如果没有生成,那么通过$ ssh-keygen -t rsa -C “邮箱”来生成。
1)是路径确认,直接按回车存默认路径即可
2)直接回车键,这里我们不使用密码进行登录, 用密码太麻烦;
3)直接回车键
生成成功后,去对应目录用记事本打开id_rsa.pub,得到ssh key公钥
或者通过git-gui.exe help->show ssh key查看
查看本地ssh key是否正常
$ssh -T [email protected]
出现如下信息表示设置成功:
Hi username! You've successfully authenticated, but GitHub does not # provide shell access.
2-2 为github账号配置ssh key
切换到github,展开个人头像的小三角,点击settings
然后打开SSH keys菜单, 点击Add SSH key新增密钥,填上标题,跟仓库保持一致吧,好区分。
接着将id_rsa.pub文件中key粘贴到此,最后Add key生成密钥吧。
如此,github账号的SSH keys配置完成。
通过:git init 可以将一个目录变成本地仓库
Ps:瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),可以发现当前目录下多了一个.git
的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
如果你没有看到.git
目录,那是因为这个目录默认是隐藏的,用ls -ah
命令就可以看见
git的运行区域(点击打开链接)
把一个文件放到Git仓库只需要两步:
1.告诉git,把文件添加到仓库或目录下的所有文件添加到仓库暂存区
$git add [-f] 文件名.后缀
$git add [-f] 文件名.后缀 文件名.后缀
$git add .
Ps:提交的代码必须都在仓库目录下,[-f]强制添加
2.告诉git,把仓库暂存区提交到仓库
$git commit –m “本次提交说明”
查看工作区文件状态
$git status
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD
指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL
:
1. 查看提交历史,以确定回退到什么版本
$git log [--pretty=oneline]
[--pretty=oneline]简化输出信息
2. 查看命令历史,以确定回到那个命令
$git reflog
3. 回退到指定版本或者指定命令
$git reset --hard commitid/指针id
1. 当你改乱了工作区某个文件的内容,工作区的修改(也可以是删除),都可以一键还原
$git checkout -- 文件
Ps:这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
2. 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改分两步
第一步:$git reset HEAD 文件
丢弃暂存区回到场景1,第二步按场景1操作
工作区中该文件已经删除,有两种选择:
一、删除版本库中的文件
$git rm 文件
$git commit –m “删除说明”
二、删错了,恢复工作区文件
$git checkout -- 文件
1.关联远程仓库
$git remote add origin 远程仓库地址
2.取消关联远程仓库
$git remote remove origin
3.查看远程库信息
$git remote –v
4.推送本地仓库到远程仓库
$git push –u origin 分支库名/master
Ps:由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
之后执行就是 $git push origin分支库名/master
5.克隆远程库到本地
$git clone 远程仓库地址
Ps: 从远程库clone时,默认情况下,你的只能看到本地的master分支
6.创建远程origin的分支到本地
$git checkout –b 分支名 origin/分支名
7.更新本地代码到远程仓库
$git pull
8. 建立本地分支和远程分支的关联(如果git pull提示“no tracking information”)
$git branch --set-upstream 分支名 origin/分支名
1.创建和切换分支
$git checkout –b 分支名
相当于下面两条命令
$git branch 分支名 创建分支
$git chechout 分支名 切换分支
2.查看所有分支
$git branch
3.合并分支
$git merge [–no—ff] [-m “描述”] 被合并分支名
Ps:[–no—ff] 参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并
4.删除分支
$git branch –d 分支名
$git branch –D 分支名 强制删除没有被合并的分支
工作只进行到一半,还没法提交,预计完成还需1天时间。Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$git stash 保存工作现场
$git stash list 查看工作现场
工作现场恢复:
1.使用 $git stash apply [stash@{0}] 恢复,stash内容并不删除,需要用 $git stash dro 来删除
2.用 $git stash pop [stash@{0}],恢复的同时把stash内容也删了
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照
1.创建标签
$git tag 标签名
$git tag 标签名 commit_id 给指定历史提交的commit_id设置标签
$git tag –a 标签名 –m “说明文字” commit_id 带说明的标签
$git tag –s 标签名 –m “说明文字” commit_id 用私钥签名一个标签
Ps: 签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对, 如果报错,请参考GnuPG帮助文档配置Key. 用PGP签名的标签是不可伪造的,因为可以验证PGP签名
2.查看标签
$git tag 查看设置的标签列表
$git show 标签名 查看标签信息
3.操作标签
删除标签
$git tag –d 标签名
推送某个标签到远程仓库
$git push origin 标签名
一次性推送给所有的标签
$git push origin --tags
删除远程标签:先删除本地标签,然后
$git push origin :refs/tags/标签名
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件.GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore。最后一步就是把.gitignore也提交到Git
校验配置文件中哪个规则写错了
$git check-ignore -v 文件名
给命令配置别名
$git config --global alias.别名 命令名
Ps:--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用
删除别名配置
当前用户:配置文件放在C:\Users\Administrator的一个隐藏文件.gitconfig中,删除对应的配置就删除别名配置
当前仓库:Git配置文件都放在.git/config文件中
1、在GitHub或GitLab上创建远程仓库
2、克隆项目,打开Bash,cd到本地想创建本地仓库的位置(一般建议你的开发就应该在这个目录上,比如Eclipse的workspace就在这个目录上,你对本地仓库的操作都会同步到开发中,在Eclipse中项目点右键refresh一下就会更新,超级方便),然后:
$ git clone "仓库的 SSH url"(成功的话就能ls查看到仓库文件,cd进去会目录上会显示(master)主分支)
3、创建分支,一般不推荐直接在主分支上开发,所以创建子分支作为开发分支
$ git branch 分支名(创建分支)
$ git checkout 分支名 (切换分支)
4、在进行了修改后,提交修改到缓存区:
$ git add 目录/文件/.(.代表目录下的全部文件)
5、如果本阶段修改已完成,可以将修改提交到本分支(即可多次add后commit):
$ git commit -m "提交说明"
这里说一下git的运行区域(图解可参看博客点击打开链接)
工作区就是我们本地的文件系统
版本库包括缓存区与分支区,执行add的修改就被提交到了缓存区,执行commit后的修改就被提交到了分支区
6、如果一天的任务完成或一阶段任务完成了,就可以把本地分支的内容提交到远程仓库中,以供管理者审查、合并:
$ git push origin 分支名
7、因为使用Git的目的就是多人协作开发,所以别人完成了的工作可能是你完成工作的基础,这时候你的本地就需要别人push到远程仓库(你们使用的是一个远程仓库)的代码,可以通过:
$ git pull origin 分支名(拉取主仓库到本地本分支)
上述过程其实相当于两步,
git fetch origin (将远程仓库拉取到本地) 与 git merge origin 分支名 (合并本地与分支)
*这样做其实是不太规范的,规范的做法是:master主分支上存放远程仓库的所有版本,子分支只用来本地开发和上传修改,所以所有的pull都应当拉到master上,而不是直接到pull子分支,然后再通过merge master实现与master子分支合并:
$ git checkout master (从当前分支切换到主分支)
$ git pull(拉取远程仓库当前版本到主分支)
$ git checkout 子分支名 (从主分支切换到子分支)
$ git merge master(与主分支合并)
注意:还有一个git rebase指令同样是合并分支,与只是被合并的分支就消亡了,是完全的合并,而merge是内容合并。rebase可以与pull一起使用,这在第九点冲突时会说到。
8、在拉取之前,因为我们有本地的修改,它们还未保存,pull后会丢失,我们可以commit提交、版本合并后再拉取,但你可能还不想这样做,而且你的代码不一定到了上传、合并的时机,那就需要暂存我们的修改:
$ git stash(暂存修改)
$ git stash pop (pull之后,弹出修改)
9、在这个过程中,有很大可能遇到冲突
最常见的冲突是内容冲突:你修改了一个函数的实现,而远程仓库版本跟你的不一样,当主版本和你的修改合并时,这段代码的修改到底听谁的,所以就冲突了。通常出现在git pull与git merge的过程中。
这种冲突的解决方式是:直接修改冲突文件,在执行指令后有冲突的文件会标识在命令行中,在冲突文件中有如下标志:
<<<<<<< HEAD
这之间的是你的修改
=======
这之间是其他人的修改
>>>>>>> 6853e5ff961e684d3a6c02d4d06183b5ff330dcc
然后删除其他人的修改或者删除自己的修改,删除标识符,当处理完所有冲突后,执行git add与git commit即可。
在git rebase的过程中,也许会出现冲突: 在这种情况,Git会停止rebase并会让你去解决冲突;在解决完冲突后,用git add命令去更新这些内容的索引(index), 然后,你无需执行commit,只要执行:
$ git rebase --continue这样git会继续应用(apply)余下的补丁,这里说的补丁是这种情况:
表示把你的本地当前分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把本地当前分支更新为最新的"origin"分支,最后把保存的这些补丁应用到本地当前分支上
$ git rebase --abort在任何时候,你可以用--abort参数来终止rebase的行动,并且当前分支会回到rebase开始前的状态。
如果想更详细的了解Git,推荐廖雪峰的Git教程
1.自带git插件进行配置我们的用户名和密码,即是自己github注册用户。windows--perferences--Team--Git--Configuration
2.eclipse生成SSH2 key:windows -- perferences--General--Network Commection--SSH2--key management--General
RSA Key
然后把生成的SSH Key 注册到github上,登录github--settings--add把上诉生成的SSH Key粘贴即可。
备注:该方法就相当于命令行方法,在公司电脑和自己笔记本电脑把生成的SSH Key粘贴即可,可以添加很多个SSH Key
查看生成的秘钥是否在在默认系统盘(C盘),有些人奇葩会安装在其他盘。
然后把生成的公钥粘贴到github上:(该步不能省略,一定要用命令检查下生成的公钥是否正常)
若该步没有操作,执行命令:$ ssh -T [email protected]报这样的错误:
3.本地创建项目如“testGit”和本地git仓库
打开eclipse,创建项目“testGit”里面随便写点什么,然后"File"--"Team"--"Share Project"--"Git"--"next"
如上图所示到此该项目“testGit”就变成git仓库,到workspace下打开该项目,发现多了一个隐藏文件“.git”,但该项目处于untracked状态(文件夹中的符号”?”表示),下面我们需要提交代码到本地仓库,如下图:
首先我们要忽略不必要的文件如maven项目target文件夹
配置.gitignore来排除这个文件夹,打开Navigator窗口,在project根目录中添加.gitignore文件,将需要排除控制的目录写入.gitignore文件中:
这样git提交就过滤了一些不必要的文件,若是要过滤其他文件夹或文件直接在“.gitignore”中写,具体写法参考:
http://blog.csdn.net/u014079 773/article/details/51602344
然后提交修改的文件必须先add然后commit故通过Team -> Add to index可以将文件加入git索引,进行版本监控:
若是不想添加到版本库中则“Remove from Index”该命令前提是为未commit,若是已经commit那么该命令不起作用。添加成功后文件状态发生变化由之前的“?”变成“*”:
细节:EGIT中只要Commit就可以默认将untracked的文件添加到索引再提交更新,不需要分开操作
最后执行commit:(首次提交后,会自动生成master分支)
在注释中输入提交信息:
到此项目“testGit”就本地提交成功。接下来我们把本地项目提交至远程远程仓库github上:
首先在github官网上登录并创建仓库“testGit”(该名称与本地仓库名称一致,表示本地仓库提交到远程仓库并与之关联),创建完毕后执行如下操作:
进行如下设置:
下拉框选择如下:
然后进入如下截图操作:注意:“Force Update”若是勾选,表示覆盖提交
点击“next”出现如下图所示:
最后点击finis如下图,登录github查看是否上传成功。
出现如下截图表示上传成功。
方法一:切换至git视图进行如下操作
1.eclipse切换至git视图
2.进行如下截图操作:
3.点击next:
4.点击finish:(directory为任意路径,但是最好不要放入workspace下,可以放入非系统盘的其他盘下,创建一个“gitHub”文件夹,该文件下专门用于存放down下的git项目)
至此从github上clone成功,如下截图:
5.选中右击“Import Project”
6.默认选中“Import existing Eclipse projects”即第一个选项
7.点击next:
8.最后点击finish,eclipse切换到“Java”视图,看到导入的项目
方法二:通过File--Import--Git方式导入
1.File--Import
2.选中git方式(表示从git中导入)
3.选中“Clone URI”(表示从远程github上导入到本地eclipse中)
4.输入远程githubURI,点击next
点击next
点击next
点击next
点击finish
至此eclipse导入github远程项目成功
1.如何提交已经修改的项目,已修改的项目文件夹出现“*”号标志,选择带“*”号标志的文件右击“Team”--"commit"
点击“commit and push”表示提交并推送,即把修改的文件提交至本地,推送到远程仓库。
2.如何恢复未提交的修改文件:
3.实际开发中提交项目只需要提交如下三个文件即可:
4.如何用命令查看,修改remote url:
如果你在连接github仓库的时候,用的https协议的地址,还需要切换为git协议
可以用git remote -v 查看你当前的remote url
$ git remote -v
origin https://github.com/love-somnus/Spring.git (fetch)
origin https://github.com/love-somnus/Spring.git (push)
可以看到是使用https协议进行访问的。
这时,你可以使用 git remote set-url 来调整你的url。
git remote set-url origin [email protected]:love-somnus/Spring.git
完了之后,你便可以再用 git remote -v 查看一下。至此OK。
5.查看本地SSH Key是否正常:
$ ssh -T [email protected]
# Attempts to ssh to github
出现如下信息表示设置成功:
Hi username! You've successfully authenticated, but GitHub does not # provide shell access.
备注:
1.使用eclipse插件提交项目至远程必须先本地提交,最后提交至远程仓库
2.查看谁提交了代码,项目右击“team”--“show history”
3.查看提交记录:Team--Show in History (命令行为:git log)
4.撤销恢复修改:Replace With--HEAD Revision (命令行为 git checkout head .)
5.更新项目远程仓库:Team-- Pull (命令行:git pull https://github.com/someone/xxx.git)
6.查看哪些文件被修改了:Team--Synchronize Workspace
7.提交项目时注意忽略不必要的文件或文件夹如maven项目下的target文件夹忽略
8.git提供了多重协议用来连接git服务器,其中最常见的就是https和git,git就是可以免用户名和密码的,不同的协议,项目连接地址是有区别的,如下
https形式:https://github.com/love-somnus/Spring.git git形式:[email protected]:love-somnus/Spring.git
选中分支右键 checkout-》checkout commit
1.以还原index2.html文件为例,打开index2.html文件,如图:
2.右键点击文件,选择team菜单,然后选择Show Local History菜单,如图
3.在右侧文件修改历史列表中,选择要查看的历史版本,点击右键,如图:
4.点击右键菜单中的Compare with workspace,可以比对所选择的版本和本地当前版本文件的不同:如图:
5.比对后,如果是要还原至的版本,那么点击右键菜单中reset->hard开始还原文件,这时会弹出提示框,如图:
6.提示框 : 询问您是否要用选择的版本文件覆盖当前文件,点击Yes即可完成还原,点击Cancel取消。
多人协作的工作模式通常是这样:
1.首先,可以试图用git push origin branch-name推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如有不足地方,还望指出,谢谢!
转载请备注源链接!