github配置及使用
安装git
对于linux系统,不同发行版本的安装方法不一样,请参考https://git-scm.com/download/linux。以ubuntu为例:
sudo add-apt-repository ppa:git-core/ppa
sudo apt update
sudo apt install git
如果是windows系统,则直接安装客户端即可,客户端下载地址:
https://www.git-scm.com/download/
配置github
配置本地用户名和邮箱
我们可以配置一个全局的用户名和邮箱,这样本地所有的git操作都会默认使用这个用户名和邮箱,方法如下:
git config --global user.name your_user_name
git config --global user.email your_email.example.com
执行以下命令验证是否配置成功,如果输出的用户名和邮箱和你配置的相同,则配置成功:
git config --global user.name
git config --global user.email
当然你也可以对某个本地代码仓库单独设置一个用户名和邮箱。首先切换到你的本地代码仓,然后执行:
git config user.name your_user_name
git config user.email your_email@example.com
同样执行以下命令验证是否配置成功:
git config user.name
git config user.email
配置github网页端邮件地址
在github主页上登录你的账户,然后点击右上角的头像,然后点击Settings
:
进入设置后,点击Emails
:
然后在Add email address
那里添加你上一步配置的邮箱。之后github会发送一封邮件到你的邮箱,你验证以下就好了。
配置公钥
github需要确认你推送的代码确实是你推送的,而不是别人冒充的,因此需要你提供一个公钥。公钥就是你的指纹信息,用来验证你的身份。首先需要在本地生成公钥,在终端输入
ssh-keygen -t rsa -C "your_email@example.com"
不需要设置密码,一路回车。在询问秘钥存放地址时,可以指定目录,也可以用默认值。最后会生成一串类似于下面的字符,表示秘钥生成成功。
秘钥有两个,.pub结尾的是公钥。用记事本打开它,把里面的内容复制下来,登录github网站个人账号,在个人账号的settings-SSH and GPG keys里面,new SSH key,把公钥的内容粘贴到Key里面,Title随便取。
执行如下代码进行验证:
ssh -T git@github.com
可能会提示你输入yes进行确认,确认之后出现下面的提示,说明配置成功,可以连接github了。如果你有多台电脑,则需要把多台电脑端的公钥都生成出来,复制到你的github账号上,这样你就可以在多台电脑上开发啦。
Warning: Permanently added 'github.com,192.30.253.113' (RSA) to the list of known hosts.
Hi JiaxYau! You've successfully authenticated, but GitHub does not provide shell access.
创建代码仓库并提交
创建目录,初始化仓库
mkdir project_code
cd project_code
git init # 初始化代码仓库
初始化后,代码仓库根目录下会出现一个.git目录,是用来做代码仓库管理的。
新建文件并提交
在代码仓库下新建文件,比如新建一个readme.md,在里面写上一些内容后提交。
git add readme.md
git commit -m "add readme.md"
必须先用git add
来添加你需要提交的文件,然后再用git commit
来提交。-m后缀后面需要添加一段文字描述,用来解释你做了什么。比如我们这次添加了一个readme文件,那就在-m后加以描述即可。这段文字描述建议不要漏掉,因为别人在看你的代码提交记录的时候,可以知道你做了什么,从而更有利于团队协作。
添加远程库
第一个方法是现在github网站上新建一个代码仓库,然后克隆到本地。这个比较简单,不说了。
第二个方法是本地已经写了一部分代码了,需要把本地的代码和远程仓库关联起来。第一步也是要在github网站上新建一个空的代码仓库,然后执行下面的命令:
git remote add origin git@github.com:JiaxYau/learngit.git #后面的链接是你新建的git代码库的链接
之后就可以把本地的代码推送到远程仓库了:
$ git push -u origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 233 bytes | 233.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'master' on GitHub by visiting:
remote: https://github.com/JiaxYau/learngit/pull/new/master
remote:
To github.com:JiaxYau/learngit.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
工作区、暂存区和版本库
工作区(working directory)就是你能看到的目录,版本库就是.git文件夹,暂存区是版本库的一部分。它们的关系入下图所示:
修改了文件之后,使用git add命令,将修改的内容添加到暂存区,再通过git commit将其从暂存区提交到当前分支。如果修改了readme.md,但是没有执行git add,这个时候执行git status查看工作区状态,会提示
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.md
no changes added to commit (use "git add" and/or "git commit -a")
"Changes not staged for commit:"说的就是没有把修改的内容加到暂存区。
执行了git add之后,再执行git status,会提示我们修改内容未提交:
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: readme.md
这个时候再执行git commit,就把修改的内容提交到分支上了。这时再执行git status,会提示工作区是干净的:
On branch master
nothing to commit, working tree clean
版本回退
我们每执行一次commit,就产生一个版本。执行git log可以看到当前所有的提交记录,也就是每个版本的信息。每个版本都有一个commit id,版本回退的时候,只需要执行git reset --hard commit_id
(commit_id不需要输完,输入前6位即可),就可以回退到对应的版本中。
github有一个HEAD指针,指向当前版本。如下图,最上面的是最新的版本,执行版本回退之后,github只是将HEAD指针指向了历史版本而已。
此外还有一个小诀窍,HEAD是当前版本,HEAD则是上一个版本,HEAD^则是上上一个版本,HEAD~100则是往前倒数第100个版本……所以如果只是回退到上一个版本,可以直接git reset --hard HEAD^
。
如果我们回退了版本之后,后悔了,又想恢复到较新的版本,怎么办呢?由于这个时候执行git log是看不到较新版本的记录的,需要执行git reflog才行。这个时候我们就得到了所有版本的commit_id,再执行git reset --hard commit_id
,就可以吃上后悔药,恢复到较新版本了。
管理修改
修改了内容,未执行git add
这个时候,修改的内容只是存在于工作区中,这个时候直接执行git checkout -- readme.md
即可(即把版本库的readme.md签出到工作区)。注意"--"不能少,不然就是切换分支了。
修改了内容,执行了git add,未执行git commit
这个时候,修改的内容以及添加到暂存区,但为提交到分支,先执行git reset HEAD readme.md
将暂存区的修改撤销掉(也就是把readme.md恢复到当前分支的状态),再执行git checkout -- readme.md
将修改从工作区中删除。
修改了内容,执行了git commit
直接进行版本回退,执行git reset --hard HEAD^
,即可回退到上一个版本。
删除文件,如何恢复
假设我们分支里有一个test.txt文件(即已经commit到分支),这个时候我们在工作区中把test.txt删除了,该如何恢复呢?由于版本库中还有test.txt,我们只要把它签出即可:git checkout -- test.txt
。当然还有另一种情况,就是我们确实是要删掉test.txt的,那么我们需要先执行git rm test.txt
,再执行git commit -m "xxx"
即可。这和新增修改是一样的。
由于工作区的修改是要提交到版本库才会生效,所以可以通过将版本库的文件签出来回复工作区的修改;而如果修改已经添加到暂存区,则要先通过分支来恢复暂存区的内容,再签出到工作区即可。如果修改已经提交到分支,则只能进行版本回退了。
分支管理
创建和合并分支
方法1,创建分支的同时,切换到新建分支:
git checkout -b dev # dev是新建分支名
方法2:,先新建分支,再切换:
git branch dev
git checkout dev
通过git branch
可以查看当前分支。在我们新建dev分支后,HEAD指针立即指向dev,所以创建分支的过程很快,只需要修改HEAD指针的指向即可。当我们在dev上修改了代码,提交到dev分支后,想把dev合并到master分支,那么需要先切换到master,然后再merge:
git checkout master
git merge dev
上面的方式是Fast-forward
模式,即“快进模式”,直接把master指向当前的提交。这种方式速度快,但是有一个缺点,就是当我们把dev分支删除后,dev分支的信息就丢失了。如果希望保留dev分支信息,可以用--no-ff
方式:
git checkout master
git merge --no-ff -m "merge with no-ff" dev
这样相当于新建了一个commit(看到-m这个参数了吗),通过下面的命令,我们可以看到这个commit的信息:
git log --graph --pretty=oneline --abbrev-commit
这个时候就可以把dev分支删除了:
git branch -d dev
解决冲突
TBD
其他常用命令
git diff HEAD -- readme.md
:查看当前版本和工作区中readme.md的差异git remote add origin git@server-name:path/repo-name.git
:关联远程仓库git push -u origin master
:第一次推送master分支的所有内容到远程仓库
参考资料
github官网doc:https://help.github.com/
廖雪峰博客:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
github配置及使用的更多相关文章
- window下配置SSH连接GitHub、GitHub配置ssh key
window下配置SSH连接GitHub.GitHub配置ssh key 此经验分两部分: 第一部分介绍:在windows下通过msysGit(Git for windows.Git Bash)配 ...
- 跟我学SpringCloud | 第六篇:Spring Cloud Config Github配置中心
SpringCloud系列教程 | 第六篇:Spring Cloud Config Github配置中心 Springboot: 2.1.6.RELEASE SpringCloud: Greenwic ...
- github配置和git学习
参考:http://www.eoeandroid.com/thread-272837-1-1.html http://blog.csdn.net/hcbbt/article/details/11651 ...
- ( 转 )Github配置
以下转自 http://liuzhijun.iteye.com/blog/1457207 有问题请联系我删除. -----———————————————————————— 如果你的代码不知道放哪里好, ...
- window下配置SSH连接GitHub、GitHub配置ssh key(转)
转自:http://jingyan.baidu.com/article/a65957f4e91ccf24e77f9b11.html 此经验分两部分: 第一部分介绍:在windows下通过msysGit ...
- ubuntu 14.0 下github 配置
一:创建Repositories 1:首先在github下创建一个帐号.这个不用多说,然后创建一个Repositories. 2:然后在ubuntu下安装git相关的东东: 1 sudo apt-ge ...
- windows中使用Git工具连接GitHub(配置篇)
Git在源码管理领域目前占很大的比重了,而且开源的项目很多都转到GitHub上面了.例如:jQuery, reddit, Sparkle, curl, Ruby on Rails, node.js, ...
- 同一台电脑使用 gitlab 和 github 配置
Git 客户端与服务器端的通信支持多种协议,ssh 最常用.ssh的公钥登录流程,用户将自己的公钥存储在远程主机,登录时,远程主机会向用户发送一条消息,用户用自己的私钥加密后,再发给服务器.远程主机用 ...
- github配置ssh密钥的方法
配置用户名和邮箱 初次安装git需要配置用户名和邮箱,否则git会提示:please tell me who you are. 你需要运行命令来配置你的用户名和邮箱: $ git config --g ...
随机推荐
- vscode中让html中php代码高亮
找到设置中的文件设置中的files.associations,增加以下内容(注意一下内容要放在右侧的用户设置中,而不是放在中间的默认设置中): { // Configure file associat ...
- collection集合整体结构图
- @清晰掉 GDB调试器中的战斗机
GDB 的命令很多,本文不会全部介绍,仅会介绍一些最常用的.在介绍之前,先介绍GDB中的一个非常有用的功能:补齐功能.它就如同Linux下SHELL中的命令补齐一样.当你输入一个命令的前几个字符,然后 ...
- maven 成长之路
1配置maven 环境变量 新建系统变量 M2_HOME :E:\apache-maven-3.5.2 在系统变量 path中添加 E:\apache-maven-3.5.2\bin 运行 mvn - ...
- 面试题:String类通用构造,拷贝构造,析构,赋值函数实现
已知 String 类定义如下: class String { public: //通用构造函数 String(const char* str = NULL); //拷贝构造函数 String(con ...
- python3--udp/TCP笔记和实践
UDP协议: UDP (User Datagram Protocol, 用户数据报协议) 是一种无连接,不可靠,基于数据的传输层通信协议. UDP的通信过程与TCP相比比较为简单, 不需要复杂的三次握 ...
- 机器学习实战-K-近邻算法(kNN)
k-近邻算法(kNN)---它的工作原理是:存在一个样本数据集合,也称做训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每个数据与所属分类的对应关系.输入没有标签的新数据后,将新数据的每 ...
- 关于BeautifulSoup4 解析器的说明
一.解析器概述 如同前几章笔记,当我们输入: soup=BeautifulSoup(response.body) 对网页进行析取时,并未规定解析器,此时使用的是python内部默认的解析器“html. ...
- 应用安全 - 编程语言漏洞 - PHP语言漏洞汇总
CVE-2019-11043 Date: 类型: 远程代码执行 前置条件: Nginx + fastcgi + php-fpm 配置文件信息如下: location ~ [^/]\.php(/|$) ...
- java 对象 json 集合 数组 互转
1.先定义一个类对象 package com.basics; import com.alibaba.fastjson.JSONObject; import java.util.List; import ...