安装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配置及使用的更多相关文章

  1. window下配置SSH连接GitHub、GitHub配置ssh key

    window下配置SSH连接GitHub.GitHub配置ssh key   此经验分两部分: 第一部分介绍:在windows下通过msysGit(Git for windows.Git Bash)配 ...

  2. 跟我学SpringCloud | 第六篇:Spring Cloud Config Github配置中心

    SpringCloud系列教程 | 第六篇:Spring Cloud Config Github配置中心 Springboot: 2.1.6.RELEASE SpringCloud: Greenwic ...

  3. github配置和git学习

    参考:http://www.eoeandroid.com/thread-272837-1-1.html http://blog.csdn.net/hcbbt/article/details/11651 ...

  4. ( 转 )Github配置

    以下转自 http://liuzhijun.iteye.com/blog/1457207 有问题请联系我删除. -----———————————————————————— 如果你的代码不知道放哪里好, ...

  5. window下配置SSH连接GitHub、GitHub配置ssh key(转)

    转自:http://jingyan.baidu.com/article/a65957f4e91ccf24e77f9b11.html 此经验分两部分: 第一部分介绍:在windows下通过msysGit ...

  6. ubuntu 14.0 下github 配置

    一:创建Repositories 1:首先在github下创建一个帐号.这个不用多说,然后创建一个Repositories. 2:然后在ubuntu下安装git相关的东东: 1 sudo apt-ge ...

  7. windows中使用Git工具连接GitHub(配置篇)

    Git在源码管理领域目前占很大的比重了,而且开源的项目很多都转到GitHub上面了.例如:jQuery, reddit, Sparkle, curl, Ruby on Rails, node.js,  ...

  8. 同一台电脑使用 gitlab 和 github 配置

    Git 客户端与服务器端的通信支持多种协议,ssh 最常用.ssh的公钥登录流程,用户将自己的公钥存储在远程主机,登录时,远程主机会向用户发送一条消息,用户用自己的私钥加密后,再发给服务器.远程主机用 ...

  9. github配置ssh密钥的方法

    配置用户名和邮箱 初次安装git需要配置用户名和邮箱,否则git会提示:please tell me who you are. 你需要运行命令来配置你的用户名和邮箱: $ git config --g ...

随机推荐

  1. vscode中让html中php代码高亮

    找到设置中的文件设置中的files.associations,增加以下内容(注意一下内容要放在右侧的用户设置中,而不是放在中间的默认设置中): { // Configure file associat ...

  2. collection集合整体结构图

  3. @清晰掉 GDB调试器中的战斗机

    GDB 的命令很多,本文不会全部介绍,仅会介绍一些最常用的.在介绍之前,先介绍GDB中的一个非常有用的功能:补齐功能.它就如同Linux下SHELL中的命令补齐一样.当你输入一个命令的前几个字符,然后 ...

  4. maven 成长之路

    1配置maven 环境变量 新建系统变量 M2_HOME :E:\apache-maven-3.5.2 在系统变量 path中添加 E:\apache-maven-3.5.2\bin 运行 mvn - ...

  5. 面试题:String类通用构造,拷贝构造,析构,赋值函数实现

    已知 String 类定义如下: class String { public: //通用构造函数 String(const char* str = NULL); //拷贝构造函数 String(con ...

  6. python3--udp/TCP笔记和实践

    UDP协议: UDP (User Datagram Protocol, 用户数据报协议) 是一种无连接,不可靠,基于数据的传输层通信协议. UDP的通信过程与TCP相比比较为简单, 不需要复杂的三次握 ...

  7. 机器学习实战-K-近邻算法(kNN)

    k-近邻算法(kNN)---它的工作原理是:存在一个样本数据集合,也称做训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每个数据与所属分类的对应关系.输入没有标签的新数据后,将新数据的每 ...

  8. 关于BeautifulSoup4 解析器的说明

    一.解析器概述 如同前几章笔记,当我们输入: soup=BeautifulSoup(response.body) 对网页进行析取时,并未规定解析器,此时使用的是python内部默认的解析器“html. ...

  9. 应用安全 - 编程语言漏洞 - PHP语言漏洞汇总

    CVE-2019-11043 Date: 类型: 远程代码执行 前置条件: Nginx + fastcgi + php-fpm 配置文件信息如下: location ~ [^/]\.php(/|$) ...

  10. java 对象 json 集合 数组 互转

    1.先定义一个类对象 package com.basics; import com.alibaba.fastjson.JSONObject; import java.util.List; import ...