Git和Github的使用
//本人的学习笔记,供个人查看
参考:https://blog.csdn.net/u011535541/article/details/83379151
一、Git的基本操作
设置用户名和邮箱:
创建本地仓库(repository)viviantestgit
把该仓库初始化为git可管理的仓库:
在viviantestgit目录下创建readme.txt,里面写“你好”
提交到仓库
修改readme.txt(增加“second”)之后输入git status查看状态:
已修改未提交状态
查看修改了什么:
提交修改后的readme.txt
查看历史修改记录:
简化版本
回退到上一个版本
查看目前内容
撤回回退
可以通过git reflog查到版本号
撤销修改:
法一:如果我知道要删掉那些内容的话,直接手动更改去掉那些需要的文件,然后add添加到暂存区,最后commit掉。
法二:我可以按以前的方法直接恢复到上一个版本。使用 git reset --hard HEAD^
法三:git checkout – readme.txt
有以下两种情况:
1.readme.txt自动修改后,还没有放到暂存区,使用 撤销修改就回到和版本库一模一样的状态。(在readme.txt中增加third)
2.另外一种是readme.txt已经放入暂存区了,接着又作了修改,撤销修改就回到添加暂存区后的状态。(在readme.txt中增加third,add后又增加fourth)
删除和恢复:
rm readme.txt之后可以commit(不可恢复),也可以用git checkout – readme.txt恢复文件(之后要commit)
二、使用Github
1.把本地库上传到远程库
在本地仓库路径下与远程仓库testgit关联起来并把本地仓库push到远程。
注意:
把本地库的内容推送到远程,使用 git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令(git push origin master)。
2.把远程库克隆到本地
把testgit2克隆到本地
3.分支创建与合并
git checkout -b dev相当于
git branch dev创建分支
git checkout dev转换分支
总结创建与合并分支命令如下:
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout –b name
合并某分支到当前分支:git merge name
删除分支:git branch –d name
解决冲突:
完成以下修改:
此时fenzhi1的readme.txt的内容是:
master的readme.txt的内容是:
合并会产生冲突:
修改:
查看修改记录:
通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff来禁用”Fast forward”模式
分支策略:首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。
另外:可以使用git stash把当前没有commit的分支隐藏起来,再去别的分支工作,工作完后回到这个分支,使用git stash apply(恢复后,stash内容并不删除,你需要使用命令git stash drop来删除) 或git stash pop(恢复的同时把stash内容也删除了)来恢复。
4.使用GitHub完成多人合作
origin代表远程仓库
现在把本地master分支push到远程仓库:
把fenzhi1分支推送到远程仓库:
接下来模拟两个人合作使用github:一个人(vivian是我方)的本地仓库是viviantestgit,另一个人(summer是对方)的是summertestgit。
首先summer先把远程仓库clone下来:
summer打算在fenzhi1上进行工作修改,并且push成功
与此同时
vivian也在fenzhi1上进行工作,但此时她不知道远程的fenzhi1已经被重新push了,因此她还在原来的自己的分支上进行工作。
先把原来fenzhi1的远程分支pull下来
然后在文件里面修改你的内容
由
修改成:
然后再push:
成功push上去。
总结:
因此:多人协作工作模式一般是这样的:
首先,可以试图用git push origin branch-name推送自己的修改.
如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull试图合并。
如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch-name推送。
//
(
先用git pull把最新的提交从origin/fenzhi1抓下来,然后在本地合并,解决冲突,再推送
git pull也失败了,原因是没有指定本地fenzhi1分支与远程origin/fenzhi1分支的链接,根据提示,设置fenzhi2和origin/fenzhi1的链接(不知道为什么fenzhi1不行):如下:
)