官网地址:https://git-scm.com/
版本控制工具:协同修改、数据备份、版本管理、权限控制、历史记录、分支管理。
集中式版本控制工具:SVN、VSS
分布式版本控制工具:Git
下载地址:Git-2.23.0-64-bit.exe
https://git-for-windows.github.io/ https://git-scm.com/download https://git-scm.com/ Idea插件
安装过程中几个重要的步骤:
这里推荐选择第一个,就是单独用户Git自己的命令行窗口
不推荐和windows的命令行窗口混用
第一个选项:如果是跨平台项目,在windows系统安装
第二个选项:如果是跨平台项目,在Unix系统安装
第三个选项:非跨平台项目
第一个选项:使用专用的Git窗口(推荐)
第二个选项:使用windows的cmd命令行窗口。
工作区 --git add [filename]–> 暂存区–git commit [filename]–>本地库
写代码 ----> 临时存储---->历史版本
工作区(Working Directory):就是你电脑本地硬盘目录
版本库(Repository):工作区有个隐藏目录.git,它就是Git的本地版本库
暂存区:存放在git目录下的index文件中(.git/index)中;add后放到暂存区本地库:commit提交到的地方。
git init
级别的优先级:就近原则,项目级别优先级优先于系统级别优先级。
二者都有时,采用项目级别的签名。如果只有系统级别的优先级,以系统级别的优先级为准。二者都没有,不允许。可以在.git/config中查看当前项目的配置信息
[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true [user] name = Tom email = codejiwei@aliyun.com可以在C:\Users\16222 \ .gitconfig文件查看
[user] name = Jerry email = codeJerry@aliyun.comgit status 查看工作区和暂存区状态
$ git statusgit add [file name] 将工作区的“新建、修改操作的文件”添加到暂存区
$ git add src/emp.java将暂存区的内容提交到本地库
git commit [file name] 然后进入vim编辑器编辑日志信息git commit -m “commit message” [file name] $ git commit src/emp.java -m "create emp.java"git reflog
记录操作日志,操作日志会保留版本号的前7位
$ git reflog基于索引值操作(推荐)
git reset --hard [局部索引值] $ git reset 36f9c96 Unstaged changes after reset: D src/student使用^符号:只能后退
git reset --hard HEAD^注意:一个^表示后退一步 $ git reset --hard HEAD^ HEAD is now at 7b79034 update 333使用~符号:只能后退
git reset --hard HEAD~n注意:表示后退n步 $ git reset --hard HEAD~2 HEAD is now at 36f9c96 update 222reset 的三个参数对比
–soft
–mixed
–hard
后退n步,如果会有新的内容文件生成,那么在退回到新文件生成前,那么这个新文件会删除!如果再回到最新版本新文件会重新回来。
git reset --hard [指针位置]
先使用reflog查看操作日志,找到最开始的指针位置,然后git reset --hard1 撤销是在没有add和commit的情况下!!!
$ git checkout -- src/emp.java2 那么如果add了之后怎么撤销呢?
# 首先查看修改之后的状态: $ git status # 然后add $ git add huashan/ # 再查看状态: $ git status开始撤销~
$ git reset HEAD huashan/ # 这个时候查看状态,又变成了红色的,修改之后的状态了 # 然后撤销 $ git checkout -- src/student.java # 这个时候就撤销了3 那么已经commit提交了的呢?
这个时候就得需要需要通过版本的后退,撤销了
git reset --hard HEAD^创建分支:git branch [分支名]
$ git branch dev查看分支:git branch -v
$ git branch -v $ git branch切换分支:git checkout [分支名]
$ git checkout dev Switched to branch 'dev'合并分支:
--1 在dev分支上修改文件student --2 提交文件student --3 切回master分支,看不到我们刚修改的内容。git checkout master --4 合并分支。git merge dev 第一步:切换到被合并分支:git checkout [被合并的分支名]第二步:git merge [有新内容分支名]合并分支的同时新建新的分支
$ git checkout -b dev2删除分支
$ git branch -d dev2 Deleted branch dev2 (was 92f0d56).冲突一般指同一个文件同一个位置的代码,在两个版本合并时版本管理软件无法判断到底应该保留哪一个版本,因此会提示该文件发生冲突,需要程序员手动判断解决冲突。
步骤1:切换到dev分支
git checkout dev步骤2:修改内容,添加,提交
git add src/student.java git commit -m "dev update student.java"步骤3:切换到master分支
git checkout master步骤4:修改相同文件相同位置。添加,提交
git add src/student.java git commit -m "master update student.java"步骤5:把dev分支合并到master分支
git meger dev步骤6:查看文件,解决冲突
步骤7:查看状态
git status步骤8:添加提交
git add src/student.java git commit -m "merged"第一步:注册,登录
第二步:创建一个新的远程仓库
设置远程库的名称
git remote add [别名] [远程地址]
$ git remote add test https://github.com/codejiwei/test01.gitgit remote -v 查看所有远程地址别名
$ git remote -v # 方式2 $ git remotegit push [别名] [分支名]
git push test master项目经理创建的远程GitHub库,对于刚上班的程序猿,会把远程库的url地址发给程序猿。然后程序猿用这个url,使用git clone 的方式克隆到本地。
克隆不需要密码是因为远程库是public项目
git clone [远程地址]
$ git clone https://github.com/codejiwei/huashan.git克隆clone执行完之后,会自动创建为这个远端地址建一个origion的代号!!!
不然的话,还得问原来项目的作者,这个远端的代码是什么吗???
我们一般是不能直接push到远程库的,需要项目经理,把程序猿拉入到合作伙伴才能push。
添加到合作伙伴的方式:
发送添加到合作伙伴的申请者的邮箱后,还需程序猿接受该申请,这个时候就可以push代码了。
从GitHub更新项目
pull = fetch + merge
git fetch [远程库地址别名] [远程分支名]
git merge [远程库地址别名/远程分支名]
git pull [远程库地址别名] [远程分支名]
git pull origin master上面的冲突是分支间的冲突!这里的冲突是程序猿和程序猿间的冲突
上传代码push的时候,由于成员A和成员B修改了同一个文件中相同位置的代码。先提交的可以提交成功,但是后提交push的时候就会报错!会报一个版本较低的错误!
解决方法:
步骤1:先pull拉取最新的代码,也就是成员A刚提交的代码
步骤2:然后解决冲突
步骤3:add、commit到本地库
步骤4:push到远程库
程序猿A不能完成任务,找了一个大神程序猿B来帮忙,这个时候项目经理允许之后,会同意大神B Fork一份项目,然后程序猿B会clone一份到本地。然后修改后push到自己的远程库。然后回pull request给项目经理,项目经理看到后可以在GitHub上merge。
步骤1:通过share subject把整个项目传入GitHub中
步骤2:使用token令牌登录GitHub
步骤3:新建仓库
步骤4 把选中的代码纳入暂存区,提交本地库(git add、commit)
主要的文件:java文件,pom文件,properties配置文件
idea自动生成的文件一般不要上传。
步骤1:编写代码
步骤2:add和commit
步骤3:push到远程GitHub
步骤4:这个时候就已将提交到GitHub上了
步骤1 通过clone导入远端项目
步骤2:填写远端地址
步骤3:修改代码然后提交
步骤4:推送到GitHub
当出现了冲突怎么解决呢?
步骤1:在[yuebuqun777888]的模块中修改与[linghuchong777888]相同位置的代码
步骤2: 进行之间做过的Commit和Push
步骤3:因为两个人都是提交相同位置的代码
IDEA会弹出如下提示
我们选择Merge操作,把冲突的部分进行手工合并。
三个选择:
Accept Yours 接受自己的版本,覆盖掉别人和你冲突的部分(危)
Accept Theirs 接受别人的版本,覆盖掉你和别人冲突的部分(危)
Merge 手工合并
步骤4:手工合并
合并完成后,会自动提交到本地库
步骤5:合并完成后再次手工push远端
主要负责管理正在进行的生产环境代码。永远保持正在运行的生产环境完全一致。
主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。
要负责管理生产环境下出现的紧急修复的代码。从主干分支分出,修理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。
较大的版本上线前,会从开发分支中分出发布版本分支,进行最后阶段的集成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后可以视情况删除。
为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支中独立出来。 开发完成后会合并到开发分支。
步骤1 建立新的分支
步骤2:在这个分支下添加新代码
步骤3:提交代码,并push到远程库
步骤4:在GitHub上可以看到新的分支