Mac下git的环境搭建和基本使用

前言
本文将介绍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.1 (Apple Git-101)

若提示

 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 12 23:32:55 2018 +0800

    测试comit vim下的操作

commit 3e79c58a6722ca56687ce30b33e3be5c0aebeaeb
Author: xxxxx <xxxxx@xxx.com>
Date:   Sat May 12 23:29:36 2018 +0800

    测试commit操作

commit 99c36ffaafadae131ea81bt6fb90a199b365f6c9 (origin/master)
Author: xxxxx <xxxxx@xxx.com>
Date:   Fri May 11 01:36:08 2018 +0800

    添加一个文件

简单分析下,我这里列了三条记录,第三条是我之前创建文件并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~1 // 已经commit,在当前分支回退1条commit,当然2就是2条;回退后修改内容还在本地
git revert HEAD~1 //已经push,回滚这条记录,需要注意的是执行完后需要继续执行以下三行才可以,因为远端会保留revert记录
    git add .
    git commit -a
    git push

总结

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


posted @ 2018-12-17 16:25  星辰之力  阅读(547)  评论(0编辑  收藏  举报