前言:在公司实习会使用git,总结一下使用git的学习过程与遇到的问题。
参考:https://blog.csdn.net/u010059669/article/details/82670484
参考:https://segmentfault.com/q/1010000009549291
参考:https://blog.csdn.net/kikajack/article/details/79846098
参考:https://blog.csdn.net/huangjw_806/article/details/78297851
参考: https://blog.csdn.net/Lucky_LXG/article/details/77849212
目录
5.3 解决Pulling is not possible because you have unmerged files
第一章 将本地git与远程git项目同步
1.1 使用git clone同步
在远程新建项目
创建本地文件夹
在本地文件夹中右键打开git bash here,输入
git clone <项目url>
项目被拉取到了本地,
在拉取的项目中进行修改,并上传
修改:新建文档new
查看状态:
上传:
git add将文件添加到暂存区
git commit在本地提交修改
将本地修改提交到远程
git push <项目url>将项目推送到github上。
远程多出了new.txt
第二章 在远程新建分支并与本地分支建立联系
参考:https://blog.csdn.net/huangjw_806/article/details/78297851
在远程新建分支mysql
git branch新建本地分支:
切换到分支mysql
修改本地文件并 add 且commit
提交到远程指定分支mysql:
git push origin mysql
参考:https://blog.csdn.net/u010059669/article/details/82670484
查看远程,提交成功
1.2 使用git init同步
参考:https://blog.csdn.net/Lucky_LXG/article/details/77849212
现在我要把如下的项目上传到自己搭建的git上.
首先在frameio下使用git init把这个文件夹变成Git可管理的仓库,可以看到文件夹下多了.git文件.
然后我们通过git add, git commit将项目提交到本地的仓库上.
创建SSH KEY。先看一下你C盘用户目录下有没有.ssh目录,有的话看下里面有没有id_rsa和id_rsa.pub这两个文件,有就跳到下一步,没有就通过下面命令创建
ssh-keygen -t rsa -C "youremail@example.com"
然后一路回车。这时你就会在用户下的.ssh目录里找到id_rsa和id_rsa.pub这两个文件.
id_rsa与id_rsa.pub一个是私钥一个是公钥,我们将公钥id_rsa.pub复制到git网站上,这样我们每次有git请求时,便会将我们电脑中的密钥id_rsa与git网站上的id_rsa.pub进行匹配,如果能匹配上,就能进行相应的git请求如上传等等.值得注意的是这样的是SSH方式,如果是HTTP方式是输入git网站的账号密码即可.
将id_rsa.pub中的内容复制到SSH密钥中,我这里不是github,github的添加方式可以看本节的参考.
添加完后将本地仓库与远程仓库进行关联
第三章 合并分支
查看当前分支:
master分支下的文件:
mysql分支下的文件:
切换到主分支然后合并
发现冲突
自定义修改并上传文件
发现远端被修改
同时也发现合并分支并不会删除分支,远端的mysql与本地的mysql都存在,且其中的内容都没有改变。所以合并分支并不是将两个分支合并成一个,而是将另一分支的代码与当前分支代码合并,也仅仅是代码合并,从我的观测结果来看代码也没有在分支合并的时候进行自动提交,合并后还是要自己add commit push
第四章 解决冲突
参考:https://segmentfault.com/q/1010000009549291
我们提交了项目代码,此时项目为A,
别人又提交了项目代码,此时为B,
我们再提交就会显示冲突,假设我们提交的代码为C,如果直接提交C会覆盖掉B。
所以我们要在本地 add commit 代码之后,pull拉取远端的代码B(pull操作会让B与C在本地merge),然后再push就可以了
在本地add与commit是为了告诉git自己修改了代码,不然pull代码的时候会把自己本地写的代码覆盖。
第五章 解决问题
5.1 解决git pull时遇到的冲突
解决git 遇到的问题,今天想从网上拉取一个git项目下来,但是总是提示冲突。
但是提示,两个文件冲突,即 .idea/misc.xml与 .idea/personalized-push-back.iml冲突。
想到.idea这个文件夹没啥用,是可以的删除的,我决定直接删除,然后继续pull。
然后继续报错
我看到error的提示中有一句话
Please commit your changes or stash them before you merge
提示让我commit我的change,然后我就想是否我已经add了代码,所以即使我删除了冲突文件也还是不能pull。
于是从网上找到了git status来查看状态:
看到了有Changes to be committed,按照网上的意思来说:
对于还没add的新增文件文件,状态是 Untracked files
对于还没add的修改,状态是Changes not staged for commit:
已经add了的修改的状态是 Changes to be committed。
已经add了的新增文件是 Changes to be committed
所以我这里要撤销对misc.xml文件的add,参考:https://blog.csdn.net/kikajack/article/details/79846098
输入 git reset -- .idea/misc.xml,发现对misc.xml文件的修改已被修改为未add的状态。
最后要将misc.xml的修改撤销
输入git checkout .idea/misc.xml (记得checkout不是切换分支么?以后再看看),发现修改已被撤销。
继续pull,成功!
Your local changes to the following files would be overwritten by merge: .idea/misc.xml
5.2 拉取远程指定分支到本地并提交
之前对远程主分支拉取是这样的:
首先commit自己的修改,然后pull 远程的分支与自己写的分支合并,最后将合并后的代码push到远端。
参考的是:https://segmentfault.com/q/1010000009549291
之前对指定的远程分支提交是这样的
git push origin <本地分支名>
参考的是:https://blog.csdn.net/u010059669/article/details/82670484
可以看到我当前是指向的mysql分支,具体匹配关系如下。
我先将自己写的代码进行commit
拉取远端mysql分支的代码
git pull origin <远程分支名>
将本地的代码推送到远端
同步成功。
关于origin的含义留待下回再学。
5.3 解决Pulling is not possible because you have unmerged files
拉取内容再提交时提示
于是再pull发现
使用git status,发现有未合并的文件
打开文件手动合并后,继续add,add后发现Unmerged paths已消失。
然后继续像以前一样,commit,push就行了。
5.4 退回版本并在远端新建分支与之对应
在实验室写项目,师兄多写了点前端,本应是我后端对应写完然后提交,但是因为有个BUG要急着修复,没时间补完对应的前端,所以我把项目推到最新之后,便退回之前的版本,并在远端建立了一个临时分支与之对应,等有空的时候再与之merge.
我打算跳回的版本.
首先在远端新建分支temporaryBranchForDownloadBug
本地新建分支temporaryBranchForDownloadBug,并切换到此分支
找到我们要退回的版本号
退回版本:
上传至远端,已将当前版本强制推送到了远端.
远端查看,成功!