【git和github】应用

先有本地仓库

首先创建工作目录

mkdir git-demo(通过命令行创建在想要创建的文件夹)
cd (git-demowen文件夹的路径) (以git-demo文件夹为工作目录)

git status(经常用可以查看仓库状态)

这个时候我们先随便操作一个命令,比如 git status ,可以看到如下提示


image.png

说明当前目录还不是一个git仓库

git init

执行 git init 命令(初始化让该目录成为git仓库;此时git-demo里生成一个隐藏.git目录)

image.png

git status

继续执行git status

image.png

图片中的意思分别是

On branch master---当前分支master(git默认仓库名称是 origin 主分支是master分别于远程仓库对应)
Initial commit---出事的commit(当我们在仓库中修改文件要add然后commit;说明这里没有commit)
nothing to commit (create/copy files and use "git add" to track)---无需commit(说明没有修改没有add)

下面我们进行一系列操作(添加文件)

 touch README.md(创建文件README.md)
 touch a.html(创建文件a.html)

git status

继续执行git status查看状态

image.png

当前分支:master
当前还是初始commit状态(没有进行过commit)
用两个文件等待被add(分别是图片中的红色的README.md 和 a.html文件)
不需要commit但是有要add的文件(应为没有add所以文件中没有需要commit的文件)

git add

执行

git add a.html

首先我们只add a.html文件git status查看状态


image.png
当前分支:master
当前还是初始commit状态(没有进行过commit)
有一个新文件a.html等待被commit
有一个文件README.md等待被add

执行

git add .

add所有文件

git commit

git commit .  (提交所有;然后进入提交上传信息页输入提交信息保存退出)
//或者下面这样
git commit -m 'first commit' (这个命令什么意思呢? commit 是提交的意思,-m 代表是提交信息)

对了,友情提醒,在提交代码之前先要设置下自己的用户名与邮箱,这些信息会出现在所有的 commit 记录里
要不然commit时候出现下面错误

image.png

执行以下代码就可以设置:

git config —global user.name "名称"
git config —global user.email "邮箱"

这里的名称和邮箱消息会出现在每一次commit记录中

这样我们就可以commit文件了
然后在执行git status(提示没有需要commit的文件)


image.png

git log

这个命令可以啊看commit的记录
如下图我们commit过两次每次的commit用户邮箱等信息都有显示


image.png

接下来我们要把我们做的东西上传到github远程仓库

第一步就是在 GitHub 上建一个 test 项目,这个想必大家都会了,就不用多讲了。
创建的仓库如下

image.png

该页面要求你赶快进行下面的操作且给出了操作步骤

第二步把本地 test 项目与 GitHub 上的 test 项目进行关联**操作如下

切换到 test2 目录,执行如下命令:

git remote add origin git@github.com:funny-man/test-git.git
origin--可以是其他名字对应不同的远程仓库

意思是添加一个远程仓库,他的地址是 git@github.com:funny-man/test-git.git ,

而 origin 是给这个项目的远程仓库起的名字,是的,名字你可以随便取,只不过大家公认的只有一个远程仓库时名字就是 origin

例如我再添加一个远程仓库起名box

git remote add box git@github.com:funny-man/box.git

为什么要给远程仓库取名字?比如同一个本地仓库我要同步一份到我自己的github账户和一个公司的github账户(两个远程仓库都和这个本地仓库关联了);此时我们git push谁知道是push给那个远程仓库呢

这时我们执行

git remote -v(查看当前本地仓库关联的远程仓库)

我们看到两个远程仓库一个叫origin 一个叫 box


image.png

就可以通过git push origin master或者git push box master推送到对应的仓库

git remote remove

刚才那个box只是测试所以我不想要这个远程仓库在没删除呢?

//执行
git remote remove box
//执行查看
git remote -v

如图box远程仓库删除了只剩下origin了


image.png

git remote set-url origin '地址'

修改已关联的远程仓库的地址

git remote set-url origin git@github.com:funny-man/box.git
//把已经关联的名字叫origin的仓库的地址改成git@github.com:funny-man/box.git

如图仓库的地址改了名字还是origin


image.png

git remote rename

既然地址改了我要把仓库名称也改成box

git remote rename origin box
//把关联的名叫origin的仓库改名叫box

如图名字变成box


image.png

git push

git push origin master
或者
git push box master
//origin--远程仓库名称
//master--分支名称

此时本地的就push到远程仓库了!(如下图)


image.png

上面我们push的很成功应为我们已经设置了ssh;如果没设置ssh会报错的下面我们单独说说ssh




SSH

关于ssh

你拥有了一个 GitHub 账号之后,就可以自由的 clone 或者下载其他项目,也可以在github创建自己的项目,但是你没法从本地向你的github仓库提交代码;

仔细想想也知道,肯定不可能随意就能提交代码的,如果谁都随意可以提交代码,那么 GitHub 上的项目岂不乱了套了,

就算像上面那样关联了也是不能随便提交的应为谁都可以获取到仓库的地址;

所以提交代码之前一定是需要某种授权,而 GitHub 上一般都是基于 SSH 授权的。

那么什么是 SSH 呢? 简单点说,SSH是一种网络协议,用于计算机之间的加密登录。目前是每一台 Linux 电脑的标准配置。而大多数 Git 服务器都会选择使用 SSH 公钥来进行授权,所以想要在 GitHub 提交代码的第一步就是要先添加 SSH key 配置。

关于ssh本地机器和github账户之间的关系

  • 每一台机器可以通过命令生成一个ssh密匙(公匙和私匙)
  • 此时你把你的公钥给别人(github账户)
  • 别人(github账户)把你的公匙放在自己家中
  • 以后你的电脑要向别人(github账户)推送东西;你的私匙会和别人配对如果别人家的公钥能和你的电脑的私匙配上对就能推送成功
  • 简单来讲谁接受了你的公匙就相当于它允许你给他推送东西

操作

Linux 与 Mac 都是默认安装了 SSH ,而 Windows 系统安装了 Git Bash 应该也是带了 SSH 的。大家可以在终端(win下在 Git Bash 里)输入 ssh 如果出现以下提示证明你本机已经安装 SSH, 否则请搜索自行安装下。

image.png

ssh-keygen -t rsa

执行

ssh-keygen -t rsa

接着连续三个回车键(不需要输入密码),然后就会生成两个文件 id_rsa 和 id_rsa.pub ,而 id_rsa 是密钥,id_rsa.pub 就是公钥。

这两文件默认分别在如下目录里生成:

Linux/Mac 系统 在 ~/.ssh 下,
win系统在 /c/Documents and Settings/username/.ssh 下,

都是隐藏文件,相信你们有办法查看的。

接下来要做的是把 id_rsa.pub 的内容添加到 GitHub 上

这样你本地的 id_rsa 密钥跟 GitHub 上的 id_rsa.pub 公钥进行配对,授权成功才可以提交代码。

第一步先在 GitHub 上的设置页面,点击最左侧 SSH and GPG keys


image.png

然后点击右上角的 New SSH key 按钮


image.png

需要做的只是在 Key 那栏把 id_rsa.pub 公钥文件里的内容复制粘贴进去就可以了(上述示例为了安全粘贴的公钥是无效的),Title 那栏不需要填写,点击 Add SSH key 按钮就ok了。

如何获取shh公匙的内容?

方法一:想办法显示隐藏文件;找到文件用编辑器(vscode)打开id_rsa.pub文件把里面的内容复制

方法二:命令行操作

cd ~/.ssh  //切换到ssh生成目录
cat id_rsa.pub  //显示id_rsa.pub内容

如下图复制打码内容


image.png



分支操作

执行 git init 初始化git仓库之后会默认生成一个主分支 master ,也是你所在的默认分支,也基本是实际开发正式环境下的分支,一般情况下 master 分支不会轻易直接在上面操作的,而是创建一个分支然后工作完成把分支的内容合并到主分支master上

查看分支:git branch

你们可以输入 git branch 查看下当前分支情况:


image.png

当前只有一个master分支

创建分支a:git branch a

如果我们想在此基础上新建一个分支呢,很简单,执行 git branch a 就新建了一个名字叫 a 的分支,这时候分支 a 跟分支 master 是一模一样的内容,我们再输入

git branch 查看的当前分支情况:


image.png

如图所示有两个分支但是当前所在分支是master

切换到a分支上:git checkout a

执行命令git checkout a,然后再输入 git branch 查看下分支情况:


image.png

这个时候我们对文件进行修改添加就是在a分支上进行了

git checkout -b a

这个命令的意思就是新建一个a分支,并且自动切换到a分支。

git merge

A同学在a分支代码写的不亦乐乎,终于他的功能完工了,并且测试也都ok了,准备要上线了,这个时候就需要把他的代码合并到主分支master上来,然后发布。git merge 就是合并分支用到的命令,针对这个情况,需要先做两步,第一步是切换到 master 分支,如果你已经在了就不用切换了,第二步执行 git merge a ,意思就是把a分支的代码合并过来,不出意外,这个时候a分支的代码就顺利合并到 master 分支来了。为什么说不出意外呢?因为这个时候可能会有冲突而合并失败,留个包袱,这个到后面进阶的时候再讲。

git branch -d

有新建分支,那肯定有删除分支,假如这个分支新建错了,或者a分支的代码已经顺利合并到 master 分支来了,那么a分支没用了,需要删除,这个时候执行 git branch -d a 就可以把a分支删除了。

git branch -D

有些时候可能会删除失败,比如如果a分支的代码还没有合并到master,你执行 git branch -d a 是删除不了的,它会智能的提示你a分支还有未合并的代码,但是如果你非要删除,那就执行 git branch -D a 就可以强制删除a分支。

git tag

我们在客户端开发的时候经常有版本的概念,比如v1.0、v1.1之类的,不同的版本肯定对应不同的代码,所以我一般要给我们的代码加上标签,这样假设v1.1版本出了一个新bug,但是又不晓得v1.0是不是有这个bug,有了标签就可以顺利切换到v1.0的代码,重新打个包测试了。

所以如果想要新建一个标签很简单,比如 git tag v1.0 就代表我在当前代码状态下新建了一个v1.0的标签,输入 git tag 可以查看历史 tag 记录。

可以看到我新建了两个标签 v1.0、v1.1。

想要切换到某个tag怎么办?也很简单,执行 git checkout v1.0 ,这样就顺利的切换到 v1.0 tag的代码状态了。


冲突

当自己和别人改同一个文件同一个地方,在执行git pull时更新本地合并就会出现冲突

1修改冲突文件
2重新提交



先有远程仓库

首先你已经在github上有一个项目要拉到本地

命令行执行一下代码

git clone https://github.com/funny-man/test.git  

上面命令中的链接就是你的仓库链接(如下图)

image.png

假如完成了上面用户名邮箱和ssh的操作
那么你就可以和上面内容一样进行各种操作了同样可以再次修改关联仓库

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,853评论 5 147
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,902评论 0 11
  • 01 在知乎“大学生是否需要恋爱教育”的讨论中, 有一条热门评论: “大学生需要怎样不搞大别人的肚子 以及怎样不被...
    燕大帮阅读 4,089评论 6 3
  • 开头先说一句,我好像7天读不完啊。 "·如果你觉得有点儿懒洋洋的,没办法集中精神,那就走出办公室,快速行走30~4...
    Alina0127阅读 169评论 0 0
  • 认识一年了!好神奇!经历那么多次纠结,我们依然联系着,没有失去,也没有变质!很难得!其实我并不是要在婚外寻求刺激的...
    乐乐妈妈_1edc阅读 181评论 0 0