Git学习记录
2017-11-24 14:49
309 查看
这里主要以github来说,目前国内的码云也挺好用的(私有仓库免费),将项目上传至Github上有很多方法,基本的账号注册不废话。
“your_email@youremail.com”就是账户邮箱,不需要“”号,接下来会提示密钥的存放路径,使用默认路径按Enter即可,然后提示设置密码,不使用密码登陆Enter即可,确认密码Enter即可。然后打开C:\Users\你的电脑名.ssh目录,下面会出现三个文件,用记事本这类工具打开id_rsa.pub文件,复制其中内容;
打开github网站,登陆后点击用户头像选中Settings,进入左侧菜单栏的SSH and GPG keys一栏,选择New SSH key创建SSH key,Title随便填,Key直接将刚刚复制的内容粘贴进去保存即可。然后切回Git Bash窗口验证是否配置成功
如果出现是否确定连接,输入yes即可,如果出现
那说明SSH验证成功
这里一定注意,现在我的删不掉了……现在解决了,见第5点。
如果中间运行遇见
提示说没有.git这样一个目录,解决办法如下:运行git init就可以了!
【上传】
这里以CentOS7环境做演示,windows上用gitBash一样,然后上传东西,一般情况下首先进行需要进行提交文件的所在目录,然后添加状态跟踪,更新后提交
右击项目–>Team–>Git
进入Configure Git Repository窗口后,Repository一栏点击Create,如果没有本地Git仓库就自己选择目录创建一个,如果有就直接选择即可,然后finsh,此时项目就已经导入到本地Git仓库了(此时相当于单纯的文本复制)。
commit项目到本地仓库: 右击项目–>Team–>commit(这里面的Commit message必填!!)–>Commit
将commit后的代码上传到GitHub: 右击项目–>Team–>Remote–>Push,如果在基本配置中配置了关联仓库可以直接使用Configured remote repository,否则选择Custom URI手动选择URI(到GitHub网站上复制自己仓库地址即可),然后填写User、Password,这里注意User填写用户名不是邮箱。
配置Specification: Source ref选择master然后点击后面的Add Spec然后上传,如果失败回到这一步勾选Force Update再次Finsh即可
关于第2部分的问题解决了,方案如下:
一定要先进入本地仓库的目录啊,不然会报乱七八糟的错误
详细如图
偶然发现一片好文章,看这个吧,我的不用看了……
http://realroyhsu.coding.me/Git-remote-control-Cooding/index.html
此时可以执行以下的指令先将远程库的代码拉下来与本地代码合并
【注意】如果这一步,不进行commit,直接进行pull操作的话,本地代码将会被远程代码覆盖!这里一定先commit再pull
执行git diff将会显示冲突的地方
然后可以在本地可以正常修改冲突的地方,修改完后正常流程提交即可
执行这个命令后会出现所有的推送日志,比如下面的:
【注意】最上面的是最新推送的,最下面是最早推送的
这里如果退出的话按q即可退出
这时如果要回退到某个版本可以复制上面的某个版本的commit的标识符,比如Wed Nov 29 19:08:51 2017 +0800的第一个版本,复制commit id为e0dfaa1b163cae0f69b0d3805224e6d6750e2623,然后执行
即可回退到指定版本,这里的版本回退是指本地仓库的代码回退到之前的版本,hader其实就是当前指针。
2.前进
在回退后,发现版本不对,应该回退到相对于当前版本的未来版本(即以前的推送版本从最早到最晚依次为:1,2,3,4,后来回退到版本2,但是会到2后,又想回到3),这时候可以用执行git log只能查看2版本之前的log,而不能查看到3、4版本的log,所以此时必须用如下的命令
才能擦还看到整个log,这时会出现如下的一些信息
简单提一下git log和git reflog的区别:
显示整个本地仓储的commit, 包括所有branch的commit, 甚至包括已经撤销的commit, 只要HEAD发生了变化, 就会在reflog里面看得到. git log只包括当前分支的commit.
然后指定回当前版本的之后的某个版本,比如:
发布后就可以得到如下的页面,其他用户可以通过这里下载压缩文件
1.创建分支并更新
在windows中的github客户端上如下操作创建分支
然后当前就会自动切换到创建的分支上(比如创建了一个叫做bug的分支),这时候照常更新代码,然后推送就会推送到bug分支上,而master分支上的代码将不会发生任何修改。
2.合并分支
比如master分支上的代码完成测试了,但是由于以前的bug是在bug分支上进行修复的,而master分支上没有进行任何修复,所以以前的bug任何存在,这个时候需要将bug分之后已经没有bug的代码合并进入master分支上。切换到master分支,点击上方菜单栏的Branch–>Merge into current branch…然后选中bug分支–>Merge into master即可合并bug修复内容到master分支的代码上(这种方式合并时会提示有冲突);或者也可以进入github的网站进入仓库根目录,会有这个东西
点击Compare & pull request进行比较,然后点击Create pull request,最后点击Merge pull request即可合并(这种方式不会有冲突)。
3.Linux下的分支
如果存在多个分支也应该要进行分支的切换
【注意】如果一个分支更新后没有commit是无法进行切换的,会警告ambiguous
在Eclipse中可以通过Team–>Switch to查看分支情况,切换哪个点哪个,很方便
2.产品发布后,记得打一个tag,方便将来拉回分支修复bug
执行允许合并的设置
允许本地仓库的合并即可,再次push即可
一、GitBash(先下载)
1.创建本地SSH Key
直接打开Git Bash,输入以下命令$ ssh-keygen -t rsa -C "your_email@youremail.com"
“your_email@youremail.com”就是账户邮箱,不需要“”号,接下来会提示密钥的存放路径,使用默认路径按Enter即可,然后提示设置密码,不使用密码登陆Enter即可,确认密码Enter即可。然后打开C:\Users\你的电脑名.ssh目录,下面会出现三个文件,用记事本这类工具打开id_rsa.pub文件,复制其中内容;
打开github网站,登陆后点击用户头像选中Settings,进入左侧菜单栏的SSH and GPG keys一栏,选择New SSH key创建SSH key,Title随便填,Key直接将刚刚复制的内容粘贴进去保存即可。然后切回Git Bash窗口验证是否配置成功
$ ssh -T git@github.com
如果出现是否确定连接,输入yes即可,如果出现
Hi xxx! You've successfull authenticated, but GitHub ...
那说明SSH验证成功
2.用GitHubDesktop上传项目到GitHub
登陆GitHub创建仓库,在Git Bash中进入本地仓库的目录(创建号好空目录后需要进入目录用git init指令初始化仓库),创建本地仓库(即当前所在目录)和远程仓库的关联,给远程的HelloWorld仓库起一个名字叫作origin,这个名字是缺省的,所以以后向这个仓库推送的时候可以直接git push,如果指定为其他名字一定要带上名字否则报错,比如
git push testRe
git remote add origin git@github.com:Jacksonary/HelloWorld.git
这里一定注意,现在我的删不掉了……现在解决了,见第5点。
如果中间运行遇见
fatal: Not a git repository (or any of the parent directories): .git
提示说没有.git这样一个目录,解决办法如下:运行git init就可以了!
【上传】
这里以CentOS7环境做演示,windows上用gitBash一样,然后上传东西,一般情况下首先进行需要进行提交文件的所在目录,然后添加状态跟踪,更新后提交
# 进入待提交文件的目录下(比如要提交一个叫做testGit的文件) cd xxx # 查看是否添加了testGit文件的状态跟踪 git status # 如果已经添加状态跟踪跳过此步骤,如果提示没有状态跟踪的文件,则用以下命令添加需要进行状态跟踪的文件 git add testGit # 再次查看是否跟踪文件状态 git status # 修改文件后需要提交变更的内容 git commit # 在git commit之后会提示让你输入提交说明(一定要填!否则不能提交) # 除此之外commit命令只是让修改提交到了本地仓库,并没有提交到远程仓库 填写说明... # 提交commit的文件到github的远程仓库 git push 【注意】这里向远程推送的时候可能会报错: 提示:更新被拒绝,因为远程版本库包含您本地尚不存在的提交。这通常是因为另外 提示:一个版本库已推送了相同的引用。再次推送前,您可能需要先合并远程变更。。。 此处是此用你的账户向自己的仓库推送,而不是向别人的仓库推送 【解决方案】 1.可以强推:git push -u origin +master 2.尽量先同步github上的代码到本地,在上面更改之后再上传,转到第7点代码冲突解决
3.利用EclipseGit插件上传项目
首先配置一下Git插件:Window–>Preferences–>Team–>Git–>Committing,取消勾选Use Staging View to ……右击项目–>Team–>Git
进入Configure Git Repository窗口后,Repository一栏点击Create,如果没有本地Git仓库就自己选择目录创建一个,如果有就直接选择即可,然后finsh,此时项目就已经导入到本地Git仓库了(此时相当于单纯的文本复制)。
commit项目到本地仓库: 右击项目–>Team–>commit(这里面的Commit message必填!!)–>Commit
将commit后的代码上传到GitHub: 右击项目–>Team–>Remote–>Push,如果在基本配置中配置了关联仓库可以直接使用Configured remote repository,否则选择Custom URI手动选择URI(到GitHub网站上复制自己仓库地址即可),然后填写User、Password,这里注意User填写用户名不是邮箱。
配置Specification: Source ref选择master然后点击后面的Add Spec然后上传,如果失败回到这一步勾选Force Update再次Finsh即可
4.删除GitHub上的文件
原理基本都一样,首先进入自己的库,选择Clone or download,然后Open in Desktop,GitHub会自动在本地创建一个一样的本地库,如果想对其作修改,那么在项目修改后commit到本地库中后,然后push到远程github即可,或者直接在Clone的那个库中直接做修改5.关联库的设置
$ git remote add origin(这个是仓库的名字,随便起,记住就行) git@github.com:Jacksonary/CodeRepository.git
关于第2部分的问题解决了,方案如下:
一定要先进入本地仓库的目录啊,不然会报乱七八糟的错误
# 首先进入与之关联的本地仓库目录 cd .... # 查看与之关联的远程库 git remote -v # 解除对应的绑定 git remote rm origin(即上面列出来的库名) # 绑定新的远程库 git remote add origin(库名) gitt@github.com:Jacksonary/CodeRepository.git
详细如图
偶然发现一片好文章,看这个吧,我的不用看了……
http://realroyhsu.coding.me/Git-remote-control-Cooding/index.html
6.clone项目到本地
进入自己的本地仓库目录(即创建一个空目录)//进入xx目录 cd xxx //将项目clone到该目录下(建议选用SSH地址复制粘贴即可) git clone 地址
7.代码冲突的解决
所谓的代码冲突,是指有多个人同时对文件进行的修改,版本控制工具无法取舍,git会保留多次的修改,在用户进行push操作时会提示如下的警告:提示:更新被拒绝,因为远程版本库包含您本地尚不存在的提交。这通常是因为另外 提示:一个版本库已推送了相同的引用。再次推送前,您可能需要先合并远程变更 balabala....
此时可以执行以下的指令先将远程库的代码拉下来与本地代码合并
【注意】如果这一步,不进行commit,直接进行pull操作的话,本地代码将会被远程代码覆盖!这里一定先commit再pull
git pull
执行git diff将会显示冲突的地方
git diff
然后可以在本地可以正常修改冲突的地方,修改完后正常流程提交即可
# 不能少,类似于挂载,commit前一步必须只能是add git add testGit git commit git push
8.代码回退和进行
1.回退# 查看推送日志 git log
执行这个命令后会出现所有的推送日志,比如下面的:
【注意】最上面的是最新推送的,最下面是最早推送的
[root@localhost test]# git log commit e0dfaa1b163cae0f69b0d3805224e6d6750e2623 Merge: aa46c2f 06b124b Author: root <root@localhost.localdomain> Date: Wed Nov 29 19:08:51 2017 +0800 Merge branch 'master' of github.com:Jacksonary/LinuxCodeRepository CentOS7update Conflicts: test/log commit aa46c2fd3e21b9a528eadf821e6e601863dcc23d Author: root <root@localhost.localdomain> Date: Wed Nov 29 19:05:33 2017 +0800 CentOS7 commit commit 06b124b6be29b3504fd6228111b33e07ec24753d Merge: ec0a010 7a62620 Author: jacksonary <jacksonary@163.com> Date: Wed Nov 29 19:01:02 2017 +0800 Merge branch 'master' of https://github.com/Jacksonary/LinuxCodeRepositor 提价本地的 commit ec0a01079a093a2d3afd03cebcdf58a99c9b219a Author: jacksonary <jacksonary@163.com>
这里如果退出的话按q即可退出
这时如果要回退到某个版本可以复制上面的某个版本的commit的标识符,比如Wed Nov 29 19:08:51 2017 +0800的第一个版本,复制commit id为e0dfaa1b163cae0f69b0d3805224e6d6750e2623,然后执行
# git reset --hard commit的id git reset --hard e0dfaa1b163cae0f69b0d3805224e6d6750e2623
即可回退到指定版本,这里的版本回退是指本地仓库的代码回退到之前的版本,hader其实就是当前指针。
2.前进
在回退后,发现版本不对,应该回退到相对于当前版本的未来版本(即以前的推送版本从最早到最晚依次为:1,2,3,4,后来回退到版本2,但是会到2后,又想回到3),这时候可以用执行git log只能查看2版本之前的log,而不能查看到3、4版本的log,所以此时必须用如下的命令
git reflog
才能擦还看到整个log,这时会出现如下的一些信息
简单提一下git log和git reflog的区别:
显示整个本地仓储的commit, 包括所有branch的commit, 甚至包括已经撤销的commit, 只要HEAD发生了变化, 就会在reflog里面看得到. git log只包括当前分支的commit.
f40e8a6 HEAD@{0}: reset: moving to f40e8a6b3c72447582f019dcf1e21310a941f00c 9d04cb3 HEAD@{1}: commit: 只剩首行 f40e8a6 HEAD@{2}: commit: 删除更目录下的文件 f9e8658 HEAD@{3}: commit: 移动log2到test文件夹下 be82917 HEAD@{4}: pull: Merge made by the 'recursive' strategy. 7204553 HEAD@{5}: commit: CentOS7 add1 90957f5 HEAD@{6}: reset: moving to 90957f590ef6013cad08fd4deca46b4975c3099b e0dfaa1 HEAD@{7}: commit (merge): Merge branch 'master' of github.com:Jacksonary/LinuxCodeReposi aa46c2f HEAD@{8}: commit: CentOS7 commit 5c35f62 HEAD@{9}: pull: Fast-forward f3bef4c HEAD@{10}: commit (merge): Merge branch 'master' of github.com:Jacksonary/LinuxCodeRepos b97c221 HEAD@{11}: commit: local update c27b62e HEAD@{12}: commit: first commit by weiguoLiu 4952fee HEAD@{13}: commit: 删除龙猫的test文件夹 90957f5 HEAD@{14}: commit (initial): 刘维国首次提交测试文件test
然后指定回当前版本的之后的某个版本,比如:
git reset --hard 9d04cb3
9.删除根目录下的某个文件
比如仓库更目录下有一个log2的文件,现在要删除,但是删除的时候就没法利用add指令来追踪状态(会提示找不到这个文件),这个时候可以这样# 删除log2文件 rm -rf log2 # 追踪所在仓库的整个状态 git add -A # 提交本地仓库 git commit # 推送到远程仓库,删除远程仓库中根目录下的log2 git push
10.里程碑的创建(Release)
在github网站上,进入仓库根目录,点击上方的“release”的标签,如果是首次创建release,那么点击页面中间的create new release即可创建一个release,如果不是首次创建,那么点击右上角的“Draft a new release”标签来创建新的release,填写如下的信息然后publish即可发布后就可以得到如下的页面,其他用户可以通过这里下载压缩文件
11.分支
有这样一个场景:已经Publish出去的Release有人反馈有bug,我们需要立刻进行修复,但是此时默认的分支master已经推送了新功能个的代码,所以不能在master分支上进行立刻发布(因为新功能的代码还没测试,这时候发不出去可能会带来严重问题),这时候就需要在已经发布的那个版本的基础上进行bug的修复,在修复后再将这种修复同步到master分支上,这样就可以在不影响当前发开的前提下解决bug。1.创建分支并更新
在windows中的github客户端上如下操作创建分支
然后当前就会自动切换到创建的分支上(比如创建了一个叫做bug的分支),这时候照常更新代码,然后推送就会推送到bug分支上,而master分支上的代码将不会发生任何修改。
2.合并分支
比如master分支上的代码完成测试了,但是由于以前的bug是在bug分支上进行修复的,而master分支上没有进行任何修复,所以以前的bug任何存在,这个时候需要将bug分之后已经没有bug的代码合并进入master分支上。切换到master分支,点击上方菜单栏的Branch–>Merge into current branch…然后选中bug分支–>Merge into master即可合并bug修复内容到master分支的代码上(这种方式合并时会提示有冲突);或者也可以进入github的网站进入仓库根目录,会有这个东西
点击Compare & pull request进行比较,然后点击Create pull request,最后点击Merge pull request即可合并(这种方式不会有冲突)。
3.Linux下的分支
如果存在多个分支也应该要进行分支的切换
【注意】如果一个分支更新后没有commit是无法进行切换的,会警告ambiguous
# 进入clone下来的项目根目录 cd xxx # 创建并切换到web-1分支 git checkout -b web-1 上述的指令是两个指令的合并 1. 创建分支 git branch web-1 2. 切换到web-1分支 git checkout web-1 # 查看当前项目的分支情况 git branch
在Eclipse中可以通过Team–>Switch to查看分支情况,切换哪个点哪个,很方便
12. 静态网页的展示
有时候需要展示一些静态的html网页,文件正常push即可,但是在访问的html文件路径前面加上
https://htmlpreview.github.io/?访问即可,比如我的html在github上一般的访问路径为
https://github.com/Jacksonary/CodeRepository/blob/master/test.xml,那么我在访问的时候我想看它的具体的渲染效果,就需要加上上面的前缀变为
https://htmlpreview.github.io/?https://github.com/Jacksonary/CodeRepository/blob/master/test.xml,这样就可以看到静态网页的渲染效果了
13.实际开发中的经验
1.每次代码提交前,最好diff一下自己的代码2.产品发布后,记得打一个tag,方便将来拉回分支修复bug
14.遇见的问题解决方案
在pull的时候报错:fatal: refusing to merge unrelated histories
执行允许合并的设置
git pull origin master --allow-unrelated-histories
允许本地仓库的合并即可,再次push即可
相关文章推荐
- git学习之-----githug通关记录(1-20关)
- Git 学习进阶篇-重写历史记录
- Git学习记录
- 版本控制管理工具--git的学习记录
- Git 学习小问题记录
- 我的git学习记录------------从廖雪峰老师网站的学习总结
- Git系统学习记录(三) --github远程仓库
- git学习记录
- xcode6 cocos2dx开玩笑git和github学习记录
- Git学习记录
- 实习先做一点事——菜鸟学习git记录
- 【Git】学习记录
- 记录学习的点滴(Git入门)
- git-canal:学习记录1
- git 学习记录
- 记录我开始学习 Git的路程
- Git基础学习记录(一)
- Git学习记录
- 第四天git学习记录
- Git学习记录