先有本地仓库
首先创建工作目录
mkdir git-demo(通过命令行创建在想要创建的文件夹)
cd (git-demowen文件夹的路径) (以git-demo文件夹为工作目录)
git status(经常用可以查看仓库状态)
这个时候我们先随便操作一个命令,比如 git status ,可以看到如下提示
说明当前目录还不是一个git仓库
git init
执行 git init 命令(初始化让该目录成为git仓库;此时git-demo里生成一个隐藏.git目录)
git status
继续执行git status
图片中的意思分别是
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查看状态
当前分支:master
当前还是初始commit状态(没有进行过commit)
用两个文件等待被add(分别是图片中的红色的README.md 和 a.html文件)
不需要commit但是有要add的文件(应为没有add所以文件中没有需要commit的文件)
git add
执行
git add a.html
首先我们只add a.html文件git status查看状态
当前分支: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时候出现下面错误
执行以下代码就可以设置:
git config —global user.name "名称"
git config —global user.email "邮箱"
这里的名称和邮箱消息会出现在每一次commit记录中
这样我们就可以commit文件了
然后在执行git status(提示没有需要commit的文件)
git log
这个命令可以啊看commit的记录
如下图我们commit过两次每次的commit用户邮箱等信息都有显示
接下来我们要把我们做的东西上传到github远程仓库
第一步就是在 GitHub 上建一个 test 项目,这个想必大家都会了,就不用多讲了。
创建的仓库如下
该页面要求你赶快进行下面的操作且给出了操作步骤
第二步把本地 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
就可以通过git push origin master或者git push box master推送到对应的仓库
git remote remove
刚才那个box只是测试所以我不想要这个远程仓库在没删除呢?
//执行
git remote remove box
//执行查看
git remote -v
如图box远程仓库删除了只剩下origin了
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
git remote rename
既然地址改了我要把仓库名称也改成box
git remote rename origin box
//把关联的名叫origin的仓库改名叫box
如图名字变成box
git push
git push origin master
或者
git push box master
//origin--远程仓库名称
//master--分支名称
此时本地的就push到远程仓库了!(如下图)
上面我们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, 否则请搜索自行安装下。
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
然后点击右上角的 New SSH key 按钮
需要做的只是在 Key 那栏把 id_rsa.pub 公钥文件里的内容复制粘贴进去就可以了(上述示例为了安全粘贴的公钥是无效的),Title 那栏不需要填写,点击 Add SSH key 按钮就ok了。
如何获取shh公匙的内容?
方法一:想办法显示隐藏文件;找到文件用编辑器(vscode)打开id_rsa.pub文件把里面的内容复制
方法二:命令行操作
cd ~/.ssh //切换到ssh生成目录
cat id_rsa.pub //显示id_rsa.pub内容
如下图复制打码内容
分支操作
执行 git init 初始化git仓库之后会默认生成一个主分支 master ,也是你所在的默认分支,也基本是实际开发正式环境下的分支,一般情况下 master 分支不会轻易直接在上面操作的,而是创建一个分支然后工作完成把分支的内容合并到主分支master上
查看分支:git branch
你们可以输入 git branch 查看下当前分支情况:
当前只有一个master分支
创建分支a:git branch a
如果我们想在此基础上新建一个分支呢,很简单,执行 git branch a 就新建了一个名字叫 a 的分支,这时候分支 a 跟分支 master 是一模一样的内容,我们再输入
git branch 查看的当前分支情况:
如图所示有两个分支但是当前所在分支是master
切换到a分支上:git checkout a
执行命令git checkout a,然后再输入 git branch 查看下分支情况:
这个时候我们对文件进行修改添加就是在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
上面命令中的链接就是你的仓库链接(如下图)
假如完成了上面用户名邮箱和ssh的操作
那么你就可以和上面内容一样进行各种操作了同样可以再次修改关联仓库