第一篇博客
git和Github的关系
一句话形容这二者的关系:git是弓,你的代码是箭,而Github则是靶。
Github是网上的仓库,你写的代码的各个版本都可以存着。
git是软件,它可在本地建立仓库,你写的代码的各个版本都可以存着。
网上的仓库和本地的仓库通过git的不同命令进行交互。
Github的简单使用
首先注册完Github账号后,登陆自己的账户,这是我的账号:

点击Repositories,点击New创建一个新的仓库,比如命名为apple:


这里要注意的是新建仓库时要在Initialize this repository with a README前面打勾,不然你无法把这仓库clone到本地仓。如果没打勾该怎么办后面在介绍。
到这里我们就在Github上创建好了一个新的仓库:

接下来如何对这个apple仓库进行操作呢,这里就要用到git命令。
git命令介绍
首先你先要在你电脑上安装git这个软件,如何安装就不说了,这是git的官网:git官网
安装完成后在终端输入
git --version
就可以查看你安装git的版本
接下来你就可以用git命令把apple仓库里的东西clone到自己电脑上了。
首先点击Clone or download并Use SSH,注意不是HTTPS,然后把git@github.com:yaoPuJian/apple.git复制下来

然后打开终端输入
git clone git@github.com:yaoPuJian/apple.git
如果你是第一次进行操作,这时系统会报错,这是因为你没有设置公钥,它不知道你有没有权利进行这个操作,这时需要在Github上设置公钥。
如何去设置呢,Github上也有详细教程,首先进入Github点击右上角头像旁的下拉菜单找到settings

点击左侧的SSH and GPG keys

点击generating SSH keys

点击Generating a new SSH key and adding it to the ssh-agent

安装它的教程在终端输入
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
your_email@example.com替换成自己Github注册的邮箱,遇到提示一直按enter
完成后就在家目录下的.ssh文件夹里生成了公钥文件id_rsa.pub,进入.ssh文件夹,终端输入
cat id_rsa.pub

然后把公钥的信息copy下来,输入到Github的Add SSH key中

这样公钥就添加完成了,这时在终端输入
git clone git@github.com:yaoPuJian/apple.git
就不会报错了

这样就把Github上apple仓库里的东西clone到自己电脑的本地仓中了

然后你就可以对本地的apple仓进行你想要的操作了,操作完成后再把本地的apple仓推送push到Github上,在开始讲push前先讲几个概念。
- 已提交(committed):该文件已经被安全地保存在本地数据库中了
- 已修改(modified):修改了某个文件,但还没有提交保存
- 已暂存(staged): 把已修改的文件放在下次提交(提交到本地数据库,不是提交到Github库)时要保存的清单中

初次使用之前需要先设置一下姓名和邮箱:
git config --global user.name "your name"
git config --global user.email yourname@example.com
好让系统知道是谁在clone或push东西。
-
clone 项目
用于把一个Github项目clone到本地变为本地仓库
git clone git@github.com:yaoPuJian/apple.git
cd apple
-
添加文件并提交
# 创建文件
touch a.md
# 在文件里写入一个字符串
echo "hello" > a.md
# 查看该文件的状态
git status
这是我在自己终端中的输入结果,git status后显示的是Untracked file,也就是已修改(modified)文件还未提交保存
yaopujiandeMacBook-Pro:apple yaopujian$ ls
README.md
yaopujiandeMacBook-Pro:apple yaopujian$ touch a.md
yaopujiandeMacBook-Pro:apple yaopujian$ echo "hello">a.md
yaopujiandeMacBook-Pro:apple yaopujian$ ls
README.md a.md
yaopujiandeMacBook-Pro:apple yaopujian$ git status
On branch master
Your branch is up to date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
a.md
nothing added to commit but untracked files present (use "git add" to track)
# 把文件添加到暂存区
git add .
git status
# 把暂存区的更新提交到本地库
git commit -am "add file"
git status
这时终端的输出信息会是
yaopujiandeMacBook-Pro:apple yaopujian$ git add .
yaopujiandeMacBook-Pro:apple yaopujian$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: a.md
yaopujiandeMacBook-Pro:apple yaopujian$ git commit -am "add file"
[master 42c0d03] add file
Committer: 姚朴健 <yaopujian@yaopujiandeMacBook-Pro.local>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly. Run the
following command and follow the instructions in your editor to edit
your configuration file:
git config --global --edit
After doing this, you may fix the identity used for this commit with:
git commit --amend --reset-author
1 file changed, 1 insertion(+)
create mode 100644 a.md
yaopujiandeMacBook-Pro:apple yaopujian$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
这时你修改的文件就已经提交到本地仓库了。
-
本地仓推送到远程Github
# 把当前本地仓库的改动推送到远程库(origin)的master分支
git push origin master
yaopujiandeMacBook-Pro:apple yaopujian$ git push origin master
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 296 bytes | 296.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:yaoPuJian/apple.git
a992ebc..42c0d03 master -> master
但这里容易存在一个问题,假如这个项目是多人合作的,远程仓库的内容别人已经改动过了,那我如果直接push推送的话是会报错的,所以我们每次推送push前最好先进行git pull把远程仓库的变动更新到本地仓库
-
修改删除文件
git pull
# 修改文件
vim a.md
git add .
# 这里要注意,如果提交信息包含大量字符串,提交参数不用加m
# 此时会进入vim界面,按下i进入编辑状态,进行编辑
# 编辑完成后按esc进入命令状态,输入:wq保存退出vim
git commit -a
git push origin master
rm -rf a.md
git add .
git commit -am "delete a.md"
#如果之前已经git push origin master过,后面可以直接简化成git push
git push
-
本地创建一个git项目推送到远程仓库
mkdir newProject
cd newProject
# 把一个文件夹初始化成一个本地git仓库
# 注意:仓库和文件夹是不同的,仓库下有一个隐藏的.git文件夹
# 对于仓库,删除.git文件夹,就变成一个普通文件夹了
git init
touch index.html
echo "hello"> index.html
git add .
git commit -am "init"
这时候我们怎么把本地这个仓库push给Github呢,因为我们不知道要把它push到Github哪里,所以需要在Github上新建一个空仓库,不勾Initialize this repository with a README。


然后把这个空仓库的SSH地址加到本地库里面
# 查看本地仓库记录的远程库地址
git remote -v
#这里把远程库的地址添加一个标签叫origin
git remote add origin git@github.com:yaoPuJian/newProject.git
# 推送到远程库地址
git push origin master
这时Github上的页面刷新一下就改变了

这里你可以把其他的远程地址添加进来,添加一个另外的标签,然后把本地仓推送到其他地方。
# 慎用,这样会强制推送,会覆盖别人代码
git push -f origin master
# 在添加一个远程库的标签
git remote add gitlab@gitlab.com:abc/blog.git
#推送到gitlab标签的地址上
git push gitlab master
# 删除gitlab标签
git remote remove gitlab
# 修改origin标签对应的地址
git remote set-url origin git@github.com:yaoPuJian/blog.git
# 把gitlab标签改名为coding
git remote rename gitlab coding
最后讲一下分支操作,因为一个项目需要多人合作完成,这时就要用到分支操作。
-
分支操作
# 查看所有分支
git branch -a
# 创建本地库dev分支
git branch dev
# 切换到dev分支
git checkout dev
touch b.md
git add .
git commit -am "add b.md"
# 推送到origin地址的dev分支上
git push origin dev

其中绿色代表本地分支,红色代表远程分支,*代表当前所处分支


在dev分支上创建一个新的文件后,你会发现master分支上的文件并没有改变,然后把dev分支推送到Github上后,在Github上你会发现多了一个dev分支



-
分支合并
git checkout master
# 把dev分支上的内容合并到当前分支(master)上
git merge dev
这样就把dev分支更新到master分支上了
-
冲突
当自己和别人改同一个文件的同一个地方时,你在执行git push时会报错,所以需要先执行git pull,但在执行git pull更新本地合并时会出现冲突,因为你在本地和别人在远程修改了同一个地方,它就不知道如何合并了,所以你需要人工修改冲突的文件在重新提交。
- 修改冲突文件
- 重新提交
网友评论