上篇博客介绍到git的安装:https://blog.csdn.net/duan196_118/article/details/104697528,接着要了解和使用git,体会git的强大之处。
一. git的工作流程:
1. 从远程仓库中克隆 Git 资源作为本地仓库。
2. 从本地仓库中checkout代码然后进行代码修改
3.在提交前先将代码提交到暂存区。
4. 提交修改。提交到本地仓库。本地仓库中保存修改的各个历史版本。
5. 在修改完成后,需要和团队成员共享代码时,可以将代码push到远程仓库。
二 . git的使用
什么是仓库呢?仓库又名版本库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。由于git是分布式版本管理工具,所以git在不需要联网的情况下也具有完整的版本管理能力。
2.1 在安装好之后首次使用需要先进行全局的配置
桌面空白处右击,点击"Git Bash Here"打开git命令行窗口
a> 配置用户名:git config --global user.name "用户名" (github上注册的用户名)
b> 配置用户邮箱:git config --global user.email "邮箱" (GitHub上注册时的邮箱)
配置个人的用户名称和电子邮件地址,这是在你每次提交代码时的说明,知道谁提交了,联系了谁
2.2 创建仓库
首先,选择一个合适的地方,创建一个空目录(D:\dsxStudy\Gits\repository),也可以通过命令行创建仓库。进入创建好的仓库,
Git仓库初始化(让Git知道,它需要管理这个目录)
执行命令 git init
表现:执行之后会在项目目录下创建".git"的隐藏目录,这个目录是Git所创建的,不能删除,也不能随意更改其中的内容。
2.3 Git常用指令操作
添加到缓存区:git add 文件名
说明: git add指令,可以添加一个文件,也可以同时添加多个文件。
语法1:git add 文件名
语法2:git add 文件名1 文件名2 文件名3...(一次添加多个文件,中间用空格隔开)
语法3:git add . 【添加当前目录到缓冲区中,不要忘记那个点】
提交至版本库:git commit -m "注释内容"
2.4 Git的时光穿梭机---版本回退
版本回退分为两步骤进行操作:
1. 查看版本,确定需要回退到的时刻点
指令:
git log
或
git log --pretty=oneline
2. 回退操作
指令:git reset --hard 提交编号
如:乘坐时光机回到创建好的第一个文件a.txt的时候。
在之前的提交过后,a.txt又进行了修改,而且新增了b.txt。
执行完毕,可以看到仓库中的文件及文件内容回到了创建好的第一个文件a.txt的时候。
如果又想回到未来
小结:
a.想要回到过去,必须先得到commit id,然后通过 git reset -hard进行回退。
b.想要回到未来,需要使用git reflog 进行历史操作查看,得到最新的commit id。
c.在写回退指令的时候commit id可以不用写全,git自动识别,但是不能写太少,至少写前4位字符。
git的其它命令:
查看仓库当前状态: git status
查看git配置信息:git config –list
初始化一个仓库:git init
把文件加入仓库:git add 文件名
把文件提交到仓库:git commit -m "说明文字"(注意一定要加说明文字还有就是先添加后提交)
删除文件:git rm 文件名.后缀名
查询
# 查看工作区文件修改状态
$ git status
# 查看工作区文件修改具体内容
$ git diff [file]
# 查看暂存区文件修改内容
$ git diff --cached [file]
# 查看版本库修改记录
$ git log
# 查看某人提交记录
$ git log --author=someone
# 查看某个文件的历史具体修改内容
$ git log -p [file]
# 查看某次提交具体修改内容
$ git show [commit]
分支
# 列出所有本地分支
$ git branch
# 列出所有本地分支和远程分支
$ git branch -a
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [new_branch] [remote-branch]
# 切换到指定分支,并更新工作区
$ git checkout [branch-name]
# 合并指定分支到当前分支
$ git merge [branch]
# 选择一个 commit,合并进当前分支
$ git cherry-pick [commit]
# 删除本地分支,-D 参数强制删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push [remote] :[remote-branch]
2.5 远程仓库
远程操作以GitHub为例,创建一个仓库,注意:仓库名要唯一。仓库相当于目录。
首先要在GitHub上创建一个账号,这个就不演示了。然后在GitHub上创建一个仓库。
Github支持两种同步方式“https”和“ssh”。如果使用https很简单基本不需要配置就可以使用,但是每次提交代码和下载代码时都需要输入用户名和密码。如果使用ssh方式就需要客户端先生成一个密钥对,即一个公钥一个私钥。然后还需要把公钥放到githib的服务器上。这两种方式在实际开发中都有应用。
http协议
1. 创建空目录,名称为shop。
2. 使用clone指令克隆线上仓库到本地
语法:git clone 线上仓库地址
3. 在仓库上做对应的操作(提交暂存区,提交本地仓库,提交线上仓库,拉取线上仓库)
提交到线上仓库的指令:git push
执行后虽然弹出输入username、password的页面,单输入后仍然报错。
首次往线上仓库shop提交内容的 时候出现了403的致命错误,原因是 :不是任何人都可以往线上仓库提交内容,必须授权。需要去更改对应文件的配置;
步骤如下:
1. 在你仓库当前目录下打开隐藏的.git
文件夹,打开config
文件,建议用代码编辑器打开
2.在下图对应位置输入你的GitHub用户名和密码,保存,回到控制台再次执行git push
即可;
此时再去刷新GitHub对应的项目页面,就会看到刚刚新增的文件了;
拉取远程仓库的文件
比如我在GitHub上新建了个index.html
的文件,并写了点内容,最后提交;
然后去拉取这个index.html
文件,指令为:git pull
这个时候再去看本地对应的文件夹,就会看到拉取到的文件了;
每天工作的第一件事就是先git pull拉取线上最新的版本,下班前要做的事是git push,将本地代码提交到线上仓库。
ssh协议
什么是ssh?
SSH 为 Secure Shell(安全外壳协议)的缩写,由 IETF 的网络小组(Network Working Group)所制定。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
基于密匙的安全验证
使用ssh协议通信时,推荐使用基于密钥的验证方式。你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
ssh密钥生成
在windows下我们可以使用 Git Bash.exe来生成密钥,可以通过开始菜单或者右键菜单打开Git Bash
git bash 执行命令,声明公钥和私钥
命令: ssh-keygen -t rsa
执行命令完成后,在window本地用户.ssh目录C:\Users\用户名\.ssh下面生成如下名称的公钥和私钥:
ssh密钥配置
密钥生成后需要在github上配置密钥本地才可以顺利访问。
登录github注册或登录账号,打开“settings”的“SSH Keys”页面,然后,点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,点“Add Key”,你就应该看到已经添加的Key
在key部分将id_rsa.pub文件内容添加进去,然后点击“Add SSH key”按钮完成配置。
创建成功
同步到远程仓库
同步到远程仓库可以使用git bash,当然也可以借助其它工具如tortoiseGit。
本人使用git bash
在仓库所在的目录(D:\dsxStudy\Gits\repository)点击右键选择“Git Bash Here”,启动git bash程序。把想要同步的文件添加到本地仓库。并查看下文件是否被添加入本地仓库,使用命令:git status
复制项目的ssh地址
此时在本地使用命令:git remote add origin git@github.com:flaky-clouds/shop.git
就把本地git仓库和github远程仓库关联了起来,接下来就能上传本地文件了.
接着将本地项目上传到github远程仓库
1. 如果远程仓库是空的且为第一次上传,使用命令:git push -u origin master,进行上传操作完成同步。如果不是第一次则使用命令:git push origin master , -u 仅在第一次上传时加上,以后都不需要了。将修改后的项目上传到github远程仓库。
2. 如果你的远程仓库不是空的(初始化了一个readme.md文件),而本地仓库没有则必须要先把远程文件同步到本地,使用命令:git pull --rebase origin master,然后再上传(或者直接将远程仓库克隆下来,往里面放文件也行,使用命令:git clone git@github.com:virsing/Leetcode.git),在使用推送命令:git push origin master .完成同步。结果如下
至此就把本地文件同步到github远程仓库了.
注意:
如果你在创建github仓库时,初始化了一个readme.md文件,远程仓库不是空的,则需要先将远程仓库与本地仓库同步,使用命令:git pull --rebase origin master.将远程文件拉回本地仓库,然后再执行:git push origin master,就能成功了.
总结:
其实只需要进行下面几步就能把本地项目上传到Github
1、在本地创建一个版本库(即文件夹),通过git init把它变成Git仓库;
2、把项目复制到这个文件夹里面,再通过git add .把项目添加到仓库;
3、再通过git commit -m "注释内容"把项目提交到仓库;
4、在Github上设置好SSH密钥后,新建一个远程仓库,通过git remote add origin git@github.com:flaky-clouds/shop.git将本地仓库和远程仓库进行关联;
5、最后通过git push -u origin master把本地仓库的项目推送到远程仓库(也就是Github)上;(若新建远程仓库的时候自动创建了README文件会报错,解决办法看上面)。
这两种方式只是遵守的协议不同,实质操作几乎一样。ssh进行公钥配置后,后继不需要再进行配置,而http协议需要进行修改config配置文件,而且需要输入用户名密码:用户名就是登陆github的用户名,密码是github的密码。
如有不足,欢迎留言指正。望不吝赐教。。。