Git 与 github

git:分布式版本管理器,就是一个管理我们文件夹的工具
github:一个网站,我们托管项目的平台
git 把文件传送到 github 上进行保管,而 github 也只接受 git 传送的代码

git 的使用

我们说了, github 只接受 git 传送上来的代码,既然我们要把项目放到 github 上,那我们就要先来学习 git 的使用,用 git 来管理我们的项目

git 的安装

1:去到官网上 Git 下载
2:安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功
3:安装成功后,还需要进行一些配置,打开 git ,在他的命令行窗口,输入(因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址)

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

安装成功之后,我们就可以开始使用 git 了

git 开始使用

1:创建版本库(repository)(其实就是进行 git 初始化,让我们的项目可以让 git 来管理)

git init //把当前的目录变成 git 可以管理的仓库

2:用 git add 把文件添加到仓库(实际上就是把文件修改添加到暂存区)

git add git.html

3:用 git commit 把文件上传到仓库(实际上就是把暂存区的所有内容提交到当前分支,我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改,这个是一次性将暂存区里的内容全部提交)

git commit -m "注释"

以上就是最简单的把我们的项目上传到仓库里的步骤,当然,git 还有很多其他的指令,我们接下来一起学习一下

Git 的一些指令

1:git status:我们可以用它来掌握当前仓库的状态,比如我们修改了一个文件,它会告诉我们这个文件修改了,还没有提交,但我们看不到修改的是什么要知道细节,我们可以用 git diff(提交修改和提交新文件是一样的两步 git add 和 git commit -m “描述”)

git status

在这里插入图片描述
2:git diff:可以帮我们查看我们修改的细节

git diff git.html

在这里插入图片描述
3:git log:它可以帮我们查看我们提交的历史记录,以便我们可以把之前的版本拉回来
在这里插入图片描述

版本的回退

git reset --hard HEAD:其中 HEAD表示当前的版本,如果你要回退到上一个版本,可以用git reset --hard HEAD^,回退两个就再 HEAD后面加两个^,但是如果你要回退很多个,在后面一直加 ^肯定不现实,我们可以用 git reset --hard 版本号就可以回退到你所选择的那个文件,但是要注意,这个时候你如果再用 git log会发现,之前新的版本没有了,这时候你可以用 git reflog命令来查看你的之前输入过的命令,从里面找到新版的log,再用 git reset --hard 版本号就好了

撤销修改

git checkout -- file:可以丢弃工作区的修改,这里有两种情况
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态

git reset HEAD <file>:可以把暂存区的修改撤销掉(unstage),重新放回工作区
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区

删除

git rm:命令用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容

远程仓库

Github:提供Git仓库托管服务的一个网站,由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置

第一步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

 ssh-keygen -t rsa -C "youremail@example.com"

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人
第二步:登陆GitHub,打开“Account settings”,“SSH Keys”页面,然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

把项目上传到github中(其实就是让本地的仓库和github上的仓库进行同步)

1:在github上创建一个仓库
在这里插入图片描述
2:将本地仓库和远程仓库关联起来

git remote add origin git@github.com:michaelliao/learngit.git//michaelliao换成自己的GitHub账户名

添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库
3:下一步,就可以把本地库的所有内容推送到远程库上,从现在起,只要本地作了提交,就可以通过命令git push origin master把本地master分支的最新修改推送至GitHub

git push -u origin master

git push:把本地库的内容推送到远程(这里实际上是把当前分支master推送到远程)
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

补充:
SSH警告:当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告,这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了,这个警告只会出现一次,后面的操作就不会有任何警告了。

克隆

git clone git@github.com:michaelliao/gitskills.git  //git地址库换成自己的

GitHub给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。

分支管理

创建于合并分支:

1:git checkout -b dev我们创建dev分支,然后切换到dev分支

git checkout -b dev  //git checkout命令加上-b参数表示创建并切换(相当于两条命令:git branch dev     git checkout dev)
Switched to a new branch 'dev'

2:git branch查看当前分支,会列出所有分支,当前分支前面会标一个*号

 git branch
 * dev
  master
  //完成之后我们就可以在dev分支上正常提交(git add       git commit -m)

3:git checkout:切换分支,现在我们切回 master 分支,这时候我们是看不到这个文件的,因为他在别的分支上

git checkout master

4:git merge:把分支的工作成果合并到master分支上

git merge dev

5:git branch -d dev合并完成后,我们就可以把分支删除了

git branch -d dev //删除分支

补充:我们注意到切换分支使用git checkout ,而前面讲过的撤销修改则是git checkout – ,同一个命令,有两种作用,确实有点令人迷惑。实际上,切换分支这个动作,用switch更科学。因此,最新版本的Git提供了新的git switch命令来切换分支
git switch -c dev:创建并切换到新的dev分支
git switch master:直接切换到已有的master分支

解决冲突:

有时候我们会出现这样的情况,在两个不同的分支上修改了同一个文件,这时候我们在进行合并的时候,就会产生冲突,我们可以用git status来查看冲突的文件,我们要手动去解决冲突后,然后在进行提交。用带参数的git log也可以看到分支的合并情况:git log --graph --pretty=oneline --abbrev-commit

分支管理策略

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

git merge --no-ff -m "merge with no-ff" dev  //-m:新的commit的描述

在实际开发中,我们应该按照几个基本原则进行分支管理:首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了

Bug分支

当我们修复bug时,我们可以创建一个新的分支,在这个分支上修改,修复后,合并分支,然后将临时分支删除。
但是,有时候我们要修复一个bug时,我们的另一个分支上的工作还没做完,不能提交,这时候我们可以把当前工作现场“储藏”(git stash)起来,等以后恢复现场后继续工作

 git stash //这时候我们的工作区就是干净的,然后我们就可以随便的创建分支来解决bug了,解决bug之后,合并然后删除分支就 ok 了

bug修复后,我们就要继续我们原来的工作了,这时候我们就要把原来的工作还原一下,有两个办法:
一是用git stash apply,但是这种方法stash内容并不删除,我们要用git stash drop来删除
二是git stash pop恢复的同时把stash内容也删了
git stash list:可以查看stash里的内容

git stash pop

但是我们发现,当前分支也是从 master 中分出来,这里也有 同样的 bug ,我们不需要再次做同样的操作,而是只需要把4c805e2 fix bug 101这个提交所做的修改“复制”到分支上,我们可以用cherry-pick

 git cherry-pick 4c805e2  //git cherry-pick <commit>:<commit>:bug分支合并时的注释
多人协作

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin
git remote:查看远程仓库的信息
git remote -v:显示更详细的信息
git push origin master:推送分支(如果要推送其他的分支:git push origin dev)
但是如果你和你的小伙伴都提交了相同的内容,会产生冲突,这时候我们就要先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送

git pull
//git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接
git branch --set-upstream-to=origin/dev dev //连接之后,我们在 pull
git pull //拉取下来之后,修改冲突的地方,再 提交(commit) push

多人协作的工作模式通常是这样:
1、首先,可以试图用git push origin 推送自己的修改;
2、如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3、如果合并有冲突,则解决冲突,并在本地提交;
4、没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
5、如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。

使用码云

1:使用码云和使用GitHub类似,我们在码云上注册账号并登录后,需要先上传自己的SSH公钥。选择右上角用户头像 -> 菜单“修改资料”,然后选择“SSH公钥”,填写一个便于识别的标题,然后把用户主目录下的.ssh/id_rsa.pub文件的内容粘贴进去
2:如果我们已经有了一个本地的git仓库(例如,一个名为learngit的本地库),如何把它关联到码云的远程库上呢?
首先,我们在码云上创建一个新的项目,选择右上角用户头像 -> 菜单“控制面板”,然后点击“创建项目”,项目名称最好与本地库保持一致
3:我们在本地库上使用命令git remote add把它和码云的远程库关联,然后我们就可以 pull 和 push 了

git remote add origin git@gitee.com:liaoxuefeng/learngit.git

4:如果在使用命令git remote add时报错

git remote add origin git@gitee.com:liaoxuefeng/learngit.git
fatal: remote origin already exists.

这说明本地库已经关联了一个名叫origin的远程库,此时,可以先用git remote -v查看远程库信息,我们可以删除已有的GitHub远程库

git remote rm origin

再关联码云的远程库(注意路径中需要填写正确的用户名)

git remote add origin git@gitee.com:liaoxuefeng/learngit.git

5:使用多个远程库时,我们要注意,git给远程库起的默认名称是origin,如果有多个远程库,我们需要用不同的名称来标识不同的远程库

git remote add github git@github.com:michaelliao/learngit.git //远程库的名字不叫origin,而是 github
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值