前言
本文将介绍git的基本概念、环境搭建、日常使用,主要针对刚接触git,或接触不久,或好久没用忘记的同学们,当然是基于mac环境的,window系统也是大同小异!本文将从以下几个模块介绍,希望能帮助到你们:

注:git可以管理图片、文档、代码等资源,为描述方便,本文以代码举例描述,其他资源使用同理;本文描述力求生动形象,所以部分细节可能模糊一点,暂且忽略即可~
Git的基本介绍
Git下载及安装
Git基本配置
生成密钥并关联仓库
日常使用场景
Git的基本介绍
是什么?
一个管理代码的工具;
我们可以通过它把本地仓库的代码提交至远程仓库;
我们可以随意切换到曾经修改过的某一版本;
它可以将你的一份代码衍生成多个分支,每个分支都可以修改;
而且可以将某一分支的改动合并到另一个分支;
本地仓库同一时间只能对应某一远程仓库的分支

涉及概念
远程仓库:服务端存放代码的地方,如github、码云,或公司的gitlab,本文以github为主
本地仓库:当前电脑中的仓库,会与远程仓库建立连接,可往远程仓库上传或下拉代码
密钥:本地仓库与远程仓库建立连接的钥匙,本地存放私钥,远程存放公钥,配对才能建立连接
远程分支:远程仓库可以创建多个分支(默认只有一个master分支),多个分支可以随意切换、各自修改
本地分支:本地仓库也可以创建多个分支(默认只有一个master分支),本地分支一般会与一个远程分支关联,当然可以切换

使用流程
为便于理解,粗略介绍一般使用流程,后面会详细介绍各个步骤和其他使用场景
1、下载安装并配置git环境
2、生成密钥对:一个公钥,一个私钥
3、创建一个远程仓库,如在github上注册账号,并创建一个仓库,上传公钥
4、在本地克隆一份远程仓库,作为本地仓库
5、本地仓库作改动,然后提交至远程仓库

Git的下载及安装
点击Git,然后选择下载安装包
Mac下是不需要主动配置环境变量的(系统已经默认配置),所以可以直接通过以下命令来查看版本号

git version

若能显示如下说明安装完成

 git version 2.15. (Apple Git-)

若提示

 xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer") does not exist,
use `xcode-select --switch path/to/Xcode.app` to specify the Xcode that you wish to use for command
line developer tools (or see `man xcode-select`)

说明你的mac没有安装 xcode,一般用户也不需要去官网下载全部xcode环境,使用以下命令部分安装即可

 xcode-select --install // 点击安装,单独安装CommandLineTools
sudo xcode-select --switch /Library/Developer/CommandLineTools

安装后再次执行上述查看version命令,正常显示说明安装完成

Git基本配置

可以通过以下指令查看当前git的config配置

git config --list

通过以下指令配置用户名和邮箱,git提交时会需要这些信息

git config --global user.name "your_name"
git config --global user.email "your_email@gmail.com"
git config core.ignorecase false // 本地仓库文件是否大小写敏感,建议配置(不配置也没关系)

到此,git环境已经安装配置完成

生成密钥并关联仓库

1、先查看本地是否有密钥对,有的话就不用创建了,如果是第一次安装肯定是没有的,打开终端,执行以下命令

cd ~/.ssh 

密钥生成后会存放在.ssh文件下,若此文件存在并ls后显示如下内容,说明你创建过,直接关联仓库即可,否则继续生成

id_rsa  id_rsa.pub known_hosts

2、通过以下命令生成密钥对

ssh-keygen -t rsa -C "your_email@youremail.com" // 这里是你自己的邮箱啊亲!不敢太实在了

创建过程中,会询问你密钥存储位置,直接enter就好,会让你设置密码,可直接enter,也可输入密码(输密码时是不显示输入进度的,直接按键盘就好了,别傻傻的等),最后显示一个矩形方框就说明创建成功了

3、上传密钥
私钥就存在本地即可,公钥需要上传至远程仓库,这样才能让本地仓库和远程仓库建立连接;同步骤1,cd到.ssh文件,ls出上述三个文件,然后复制公钥id_rsa.pub内容,如下

xxxdeMBP:~ liyang$ cd ~/.ssh
xxxdeMBP:.ssh liyang$ ls
id_rsa id_rsa.pub known_hosts
xxxdeMBP:.ssh liyang$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRIqBw5EEyfmXX6NJ3gZB7SOFC1ATsiSPgVb8kchYNvM7qS8h/WJeFPVcY+5Uyx
SlQ/aGH1UtnLJVrTUryO5iOFN+VKSwsJPFUxxx61TQ5pV5v/HK3FzXe8+2F5ZFrGmeWr7oaWXDS4gS8DWQpY5mzPRY6MsHZ4o2tUw
+5toqlgdR/tVnhOwVa4tZ7HuUbQ4twpt2YuFFix9TAnvLXPReTt3gaFrswLePYRFVniK2pSUAnAnxPugTDH1dFlucuFFREUSy+/kB
YlXdayo8+SkdonoDVG9sHAMb6YyJtpnY/PC28NcBWphcWqI/1yPhqTSFIBo6xxx4LWN3W4t79Un9Z xxyaxx@xxx.com

复制上述四行公钥,上传至github:登录账号、点击头像、选择Settings、选择SSH and GPG keys,然后new一个ssh key,名称随便起

4、建立本地仓库
远程仓库创建好之后,复制仓库地址,然后在本地克隆一个(若你设置过密码,会要求你输入密码,输入即可),如下

git clone git@github.com:YourCount/GitTest.git // clone后面的连接替换成你自己的

至此,本地仓库和远程仓库都已创建好并建立连接,我们可以使用git来管理代码了

日常使用场景
注:虽然目前有不少人性化的gui工具,但我们不应该过于依赖图形界面,切身经历,这玩意用久了你就废了!所以赶紧学用命令行操作吧同学们~
查看分支
我们通常会关心:本地有哪些分支、远端有哪些分支、本地分支目前与哪个远端分支有关联等,大家在查看时可能发现自己的远程和本地都只有一个分支,这个没有关系,等看完创建分支再回来试用即可

查看本地分支

git branch

执行上述命令后,在我本地显示如下,说明我本地有4个分支,当前代码所属的分支是master分支

* master
v1
v2
v3
查看所有分支
git branch -a

执行上述命令后,我本地显示如下,说明我共有6个分支,2个远程分支,4个本地分支

* master
v1
v2
v3
remotes/origin/master
remotes/origin/remote_branch_1

执行以下命令可查看所有分支及其最近一条提交记录

git branch -av
* master                         5dd8070 测试push
v1 5dd8070 测试push
v2 5dd8070 测试push
v3 5dd8070 测试push
remotes/origin/master 5dd8070 测试push
remotes/origin/remote_branch_1 5dd8070 测试push
查看本地分支与远程关联分支
git branch -avv

执行如上命令时,显示如下,说明我本地分支是master,关联与远程分支origin/master。剩下的只有v4与远程分支有关联,其他分支都没有关联远程分支

 a                              5dd8070 测试push
b 5dd8070 测试push
* master 5dd8070 [origin/master] 测试push
v1 5dd8070 测试push
v2 5dd8070 测试push
v3 5dd8070 测试push
v4 5dd8070 [origin/master] 测试push
remotes/origin/master 5dd8070 测试push
remotes/origin/remote_branch_1 5dd8070 测试push
查看远程分支直接的关系
git remote show origin
* remote origin
Fetch URL: git@github.com:xxxx/GitTest.git
Push URL: git@github.com:xxxx/GitTest.git
HEAD branch: master
Remote branches:
master tracked
remote_branch_1 tracked
Local branches configured for 'git pull':
master merges with remote master
v4 merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)

提交代码到本地仓库
本地仓库和远程仓库一样,也有分支啊、版本啊的概念。所以你本地修改了代码,需要先commit到本地仓库,然后才将commit记录push到远程仓库,这里我们先说怎么commit到本地仓库

查看本地仓库状态
执行以下命令(注意,这些命令需要在本地仓库的根目录执行,后面的也是)

git stauts 

若显示如下内容,说明你的本地分支是master,而且没有改动,所以没什么可提交的,此时执行git diff也是什么都没有

On branch master
Your branch is up to date with 'origin/master'. nothing to commit, working tree clean

若显示如下内容,说明你的本地分支是master,并且修改了”a“文件,而且没有暂存(所有改动暂存后才能提交),此时通过git diff就可以查看你改动的内容

Your branch is up to date with 'origin/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: a no changes added to commit (use "git add" and/or "git commit -a")
提交修改

上文说道,未暂存(这个概念也比较抽象,可以理解成打包或者说是收拾,东西收拾好才能给人嘛)的文件是不能提交的,所以我们需要先把改动暂存。暂存可以执行如下两条命令

git add a // 只暂存a文件,如果当本修改了好多文件但你只想提交一个,可以使用这个命令
git add . // 暂存全部文件

当然,对应的,暂存后突然不想暂存了,或者说东西打包好了突然不想给人了,可以拆开嘛,也就是撤销add操作,对应如下两条命令

git reset a // 撤销add a文件
git reset . // 撤销add 所有文件

可以试验一下,暂存后再通过git status查看状态,结果是不一样的 
执行如下命令,提交本次改动

git commit -m "本次修改描述信息"

后面的描述信息是提交时一般要备注的,提交时没必要加双引号。当然,若你有复杂的提交信息,可以通过以下命令,在vim里操作,执行后跟普通的vim操作一样了

git commit -s

到此,我们本地仓库已经提交完成,可以通过以下命令来查询本地提交记录

git log

我这里显示如下结果

commit af1a469deacd3092bb994458131ae82d5babf7ca (HEAD -> master)
Author: xxxxx <xxxxx@xxx.com>
Date: Sat May :: + 测试comit vim下的操作 commit 3e79c58a6722ca56687ce30b33e3be5c0aebeaeb
Author: xxxxx <xxxxx@xxx.com>
Date: Sat May :: + 测试commit操作 commit 99c36ffaafadae131ea81bt6fb90a199b365f6c9 (origin/master)
Author: xxxxx <xxxxx@xxx.com>
Date: Fri May :: + 添加一个文件

简单分析下,我这里列了三条记录,第三条是我之前创建文件并push到远程仓库了(当然所有log的Author信息我改了下),所以我们看到第三条括号了写的是(origin/master)表明已经推送到远程仓库了;前两条是我刚刚commi到本地的,所以显示(HEAD -> master),我们现在需要做的就是将本地仓库的代码push到远程仓库

提交代码到远程仓库
提交代码前,建议先下拉代码并rebase。因为我们的一份代码,可能多人同时修改,当多人同时修改一处代码时会产生分叉合并,所以为了保证分支记录纯净(只有一条线),我们提交时先把被人提交的pull并rebase一下然后提交自己的,所以执行如下命令

git pull --rebase // push前先下拉并rebase代码
git push origin Head:master // 提交代码到远程master分支
git push // 也可以直接这样提交,前提是当前分支与远程分支有关联(当然和上面二选一)

当远程仓库有改动时,我们需要将最新代码下拉至本地仓库

git pull --rebase

管理分支

创建本地分支
git checkout -b v2 // 创建新分支v2,并将当前分支切换为v2
切换分支
git checkout v1 // 从当前分支切换为v1
创建远端分支
git push origin v1:remote_branch_v1
// 以本地分支v1为基准,创建远程分支remote_branch_v1,中间":"两边不要有空格
删除远程分支
git push origin :remote_branch_v1 // push一个空的分支覆盖掉远端分支,就是删除
从远端拉取分支到本地,并建立关系
git checkout -b v4 origin/master // v4本地原来不存在,master远端原来存在
直接推送代码到关联的远程分支

有时候我们直接通过git push来推送代码时,发现它提示如下

fatal: The upstream branch of your current branch does not match
the name of your current branch. To push to the upstream branch
on the remote, use git push origin HEAD:remote_branch_v1 To push to the branch of the same name on the remote, use git push origin local_v1

这时候我们执行如下命令,就可以将直接通过git push将代码推送到与本地分支关联的远程分支了

git config --global push.default upstream

撤销操作

人生没有后悔药,但是git有,而且很强大

git checkout . // 代码改动后,撤销所有改动
git reset a // git add a 后,撤销对a的add
git reset . // git add . 后,撤销add所有
git reset HEAD~ // 已经commit,在当前分支回退1条commit,当然2就是2条;回退后修改内容还在本地
git revert HEAD~ //已经push,回滚这条记录,需要注意的是执行完后需要继续执行以下三行才可以,因为远端会保留revert记录
git add .
git commit -a
git push

总结

至此,git的基本使用已经讲完了,了解完这些应该够应付平时的学习工作了。当然,git还有许多其他骚操作(merge、合代码之类的)大家可以用的时候查,或者我以后有时间补充。水平有限,有什么错误欢迎指正,谢谢~

												

Mac下git的环境搭建和基本使用的更多相关文章

  1. Mac下R语言环境搭建

    Mac下R语言环境搭建 博主在数据分析的时候一直用的python(MATLAB太重了),最近跟其他搞学术的人合作,需要用一下R语言,所以也打算顺便学习一下R. R语言简介 R语言是用于统计分析,图形表 ...

  2. OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建

    # OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-hom ...

  3. MAC下的XMPP环境搭建

    实现即时通信有多种方式,下面讲的是Mac下使用XMPP来实现. XML Messages Presence Protocol 可扩展消息处理协议 简单讲就是基于XML语言的点对点即时通信协议  原理: ...

  4. mac下selenium+python环境搭建

    selenium2+python的环境搭建主要需要python和selenium 1.python mac下自带了python,可以查看版本.当然可以选择安装其它版本的python. 2.seleni ...

  5. mac下java 开发环境搭建

    mac配置java开发环境: jdk1.7 +sdk1.7+maven +tomcat   1.先安装jdk ,才能安装sdk . 2 mac中jdk1.7的默认位置:/Library/Java/Ja ...

  6. mac下Android开发环境搭建

    之前一段时间在学习ios的开发,近一段时间想着也接触下Android开发,以来加深对移动端开发的理解.这里根据自己配置Android开发环境的过程,比较详细的来总结下自己的安装过程,希望对一些正准备配 ...

  7. Mac下JAVA开发环境搭建

    最近开始学习JAVA, 首先配置下环境! 1.Mac自带的jdk版本老了,需要到oracle官网去下载新的jdk,具体下载那个版本看个人需求,然后安装.   安装完成之后打开Terminal, 执行命 ...

  8. MAC 下 STF 的环境搭建和运行

    STF --WEB 端批量移动设备管理控制工具 安装各种包 (首先安装Macport,因为后面需要用到port:http://www.ccvita.com/434.html) linux的基本包安装, ...

  9. Mac下Qt的环境搭建

    1.分别下载并安装XCode和Command Line Tools(必须安装),安装完毕后,Clang就有了. https://developer.apple.com/downloads/ 2.下载Q ...

随机推荐

  1. Storm累计求和Demo并且在集群上运行

    打成jar包放在主节点上去运行. import java.util.Map; import backtype.storm.Config; import backtype.storm.StormSubm ...

  2. 我的Git教程 之 初始化本地库

    初始化本地库 前言:这个教程只适用于像我一样大致理解Git的原理,但是不太记得住Git命令的同学使用.所以具体原理只会提一下,具体可以参见Pro Git.同时,下面的操作需要先安装相应的Git工具,具 ...

  3. php 页面 不显示任何错误提示

    error_reporting(0); ini_set('html_errors',false); ini_set('display_errors',false);

  4. AndroidStudio报错Software caused connection abort: recv failed

    Software caused connection abort: recv failed 这个问题网上有一种说法 已知会导致这种异常的一个场景如下: 客户端和服务端建立tcp的短连接,每次客户端发送 ...

  5. Centos虚拟机SVN的安装和使用http方式访问svn服务器

    1.查看是否安装旧版SVNrpm -qa | grep subversion2.卸载旧版本SVNyum remove subversion3.安装SVNyum -y install subversio ...

  6. gcc 混合连接动态库和静态库

    当对动态库与静态库混合连接的时候,使用-static会导致所有的库都使用静态连接的方式.这时需要作用-Wl的方式 gcc test.cpp -L. -Wl,-Bstatic -ltestlib  -W ...

  7. spark报错处理

    Spark报错处理 1.问题:org.apache.spark.SparkException: Exception thrown in awaitResult 分析:出现这个情况的原因是spark启动 ...

  8. bzoj 2138: stone

    Description 话说Nan在海边等人,预计还要等上M分钟.为了打发时间,他玩起了石子.Nan搬来了N堆石子,编号为1到N,每堆 包含Ai颗石子.每1分钟,Nan会在编号在[Li,Ri]之间的石 ...

  9. Node.js之HTTP请求与响应

    在C#.OC中也是客户端发起一个请求,服务端作出响应.我们可以把这个过程抽象理解 . 1.客户端给服务端发起请求相当于向服务端写入一个流(writable) 2.服务端读取客户端的流(readable ...

  10. [转]React 教程

    本文转自:http://www.runoob.com/react/react-install.html React 可以直接下载使用,下载包中也提供了很多学习的实例. 本教程使用了 React 的版本 ...