Git]踏出新手村教程

先快速上手

非纯新手跳过

  1. 远程git账号

不管是自己用,公司用,还是想拉取别的源码,你要有个远程地址的账号。

全球最大同志交友平台-GitHub:https://www.github.com
国内最知名-码云(没错是这个名字):https://www.gitee.com

  1. 本地Git安装-给你要用的电脑用

你都要使用git了,我相信你至少会安装吧。

Windows平台: 官网下载:
Mac平台: 因为有XCode原因,自带Git

敲命令工具推荐:

  • windows: GitBush(git安装自带)
  • mac: Item2
  1. 在远程git上创建一个新的仓库

跟着教程一步步做就好,每个平台大差不差,创建好后的界面一般会显示如下的内容:

Git 全局设置

这个在本地安装完成后,如果是第一次安装git,需要给电脑的git设置一个用户的邮箱,方便给远程了解到是哪个电脑对远程进行了操作步骤。

如果不了解,可以查看是否有账号

git config --global --list

配置个人信息(只在一次做)

git config --global user.name `<名字>`
git config --global user.email `<E-mail>`

创建新版本库
这是从远程拉下来,与咱们情况不符。

git clone `<Git地址(http...xxx.git)>`
cd `<文件夹名>`
touch README.md 
git add README.md
git commit -m "add README"
git push -u origin master

已存在的文件夹
当然这个是情况了,一般我们都是有本地的东西要推上去用,如果你没有内容要推的话,可以新建一个.txt文件,随便输入点你喜欢的东西用于测试,当然你这个文件名包括后缀名合起来刚好叫README.MD的话,那么这里的内容就会显示在仓库主页。哈哈。

初始化git时,最好在文件的根目录,要不远程git上只显示一个文件夹会很不专业。

cd `<根文件夹名>` ## 进入根目录或,在根目录文件夹右键选择打开Git Bush
git init ## 初始化Git
## 把本地git与远程git连接在一起
git remote add origin `<Git地址(http...xxx.git)>` 
git add . ## 添加要提交文件(.代表所有)
git commit -m "Initial commit" ## 给本地git提交一个节点
git push -u origin master ## 把本地最新节点推到远端,第一次需要输入远端用户名与密码

***注意:***第一次push需要输入远端用户名与密码

已存在的 Git 版本库
这是修改现在的Git,与咱们情况不符。

cd `<文件夹名>`
git remote rename origin `<老Git地址>`			
git remote add origin `<新Git地址>`
git push -u origin --all
git push -u origin --tags

完成后,你就能看到远端有你的本地的内容了,Over~

Git最最最基础知识

什么是git:一种分布式版本管理工具,可以有多个远程(remote)
什么是github:就是一个网站,只是这个网站提供git服务器的功能

Git各部分图
有远端,有本地,远端有多个分支,本地也可以有多个分支,两者可以不完全一致,但是互相交集的部分,需要保持一致,如果不一到就会有冲突,需要合并后处理不同,最后达到保持一致。

配置个人信息
主要方便Git识别身份。

git config user.name "你的名字"  
git config user.email "你的@邮箱.com"
  • 格式:git 命令 属性
  • 查看配置信息: git config --list
  • 初始化:在某个要用Git的文件夹初始化一个Git(人称仓库)

  • 配置个人信息(只在一次做)

  • 分叉:

    • 拉下来内容
    • 推上去内容
  • 初始化

    • 命令:git init
    • 就会创建一个 .get 隐藏文件夹

走出新手村

学习完基础知识后,就要进出新手村了,提下来就是要实战了。

把修改的文件装箱里-添加文件(add)

先把文件添加到暂存区

# git add `<文件路径>`
git add ./README.md # 添加一个文件
git add . #添加"修改过的"所有文件

打包拍照留存记录-提交节点(commit)

把暂存区的文件提交仓库里,生成一个节点,这时的命令会在本地多一个新的节点。

# git commit -m "注释" 
git commit -m "我们添加了一个新的功能" 

-m 表示指定一个字符串,作为提交的说明(相当于注释);

当然前两步可以一起执行,合并addcommit命令

git commit -a -m "这是使用合并添加与提交的操作";

发送快递-推送节点(push)

写快递单号喽

# git push [远程服务器地址] [远程服务器的分支]
git push https://github.com/xxxxxxx.git master

每次都要写太麻烦了,将远程服务器地址写成变量的形式记录下来,约定俗成的大家都会起名origin,除非有特殊需要。

# git remote add [变量名]  [远程服务器地址]
git remote add origin https://github.com/xxxxxxxxx.git
# 可以快乐的偷懒了
git push origin master

就这我都嫌弃麻烦,如果我就一个远程地址,可以更简单哟
push时加上-u参数,就会默认建立本地当前分支与远程指定分支的关联,下一次push时就不需要输入分支名了git push;

# 使用一次-u 
git push -u origin master
# 第二次push 
git push 

看看官方-u解释,使用git push -h查看git push相关命令
-u, --set-upstream set upstream for git pull/status
这里意思时,给git状态设置默认上游,这样下次直接使用转为上游

收取快递-拉取节点(pull)

如果本地没有.git目录,需要先初始化一下。或者对地址git clone

# git pull [远程服务器地址] [远程的分支]
git pull https://github.com/xxxxxxxxx.git master

其他重要的小细节

查看工作区状态
看哪里文件是什么状态,当然有可视化工具会更方便。

git status

添加忽略文件
在项目中有一些文件是不需要提交的,我们需要把它忽略掉,在根目录创建名为.gitignore(就这个名字,只有后缀)的文件,写上需要被忽略的文件的路径。

# 使用井号来做注释
/css/a.css
/css/*.css
/a.html

查看提交日志

git log #可以查看每一次提交的日志
git log --oneline #表示使用简洁的形式输出提交日志

比对文件差异
用来比较工作区内容与最近一次提交的内容的区别,如果暂存区没有文件,就会将工作与代码与最近一次提交对比

git diff
git diff --cached #比较暂存区的文件和仓库中文件的区别
# 对比之前某两次提交的文件的差异
# git diff [版本号1] [版本号2] [想比较的文件路径]

使用软件对比,效率会更高哟

精英的战斗(中级篇)

第一次冲突

当远程(remote)的节点会其他人推上(push)一个新的节点而这些,我们没有拉下(pull)来时,在本地又推了(push)另一个节点到远程(remote),这时就会发生冲突。
如果这两个节点中修改的文件不同,或者同一文件中修改的地方不同,那么git会我们自动处理合并。
如果不能自动合并分支,就会有冲突,我们需要手动解决冲突,然后再次提交。
[TODO]

注意:把代码push到服务器时需要先pull一下

后悔药

不管是因为产生了不可返回的错误,还是因为(本地)最新的几次提交(commit)不满意,当我们想返回之前的几个版本时。
需要处理好本地的提交路径然后推到远端

# git reset --hard 版本号
# git reset --hard Head~数字,0代表上一次 
# 通过每次提交时生成的版本号来回退版本
git reset --hard Head~1 # 退到上上一次版本

查看每次提交的版本号

git reflog

这个命令也可以查看之前所有版本切换的操作记录

平行宇宙-新的分支

新建好的代码库有且仅有一个主分支master,它是自动建立的。

如果要建立分支,会根据当前分支的commit的最新节点来创建,所以当前在编辑中的内容,没有add,没有commit的内容,不会复制过去。
一般开发者会建立一个专门用来开发的分支,比如

新建一个叫develop的分支,基于master分支:

git branch develop master

切换到这个分支:

git checkout develop

上边两个步骤可以合并,可以新建一个分支develop2,同时切换到这个分支

git checkout -b develop2 develop # 从develop复制过来

现在在develop分支上进行了一些工作需要提交,并推送的远程。

push能力的升级

  1. 因为这时远程上还没有这个分支,可以直接:
git push -u origin develop

这样远程新分支也同时创建好了

  1. 当远端有多个分支时,要推送的远端名字与本地不一定要一一致,提交时可以用这样的格式:
# git push -u origin 本地名:远程名
git push -u origin develop:master

如果左边不写为空,将会删除远程的右边分支。

git push -u origin :master # 删除远端master分支

查看分支
可以查看所有的分支

git branch    # 查看本地分支
git branch -r # --remote 查看远程分支
git branch -a # --all 查看本地及远程分支

删除分支
将删除本地develop2分支,远端不影响

git branch -d develop2

复制武功秘籍-克隆

对于网上公有的git地址,我们是可以通过clone的方式得到的。

git clone https://github.com/xxxxxxxxx.git 

这个方法只会拉取项目默认master分支,如果需要其他分支,可以这样操作。

git branch -r # 先看有哪些分支

比如有个dev分支, 这时候可以新建一个基于远程的dev分支的本地dev分支,

git checkout -b dev origin/dev

这时就会下载远端分支dev并生成为本地dev分支

添加时空跳跃节点-加tag

对于有些节点,我们可以添加一个tag标签,方便随时跳转到这个节点,可以使用git tag,其中两个参数,一是标签名称,另一个是分支名,取这个分支的最新节点。

git tag tagname develop

平行宇宙探索-合并分支

当我们在develop分支上开发测试完后,需要将这个分支内容合并到master分支上。

git checkout master # 先转到主分支
git merge --no-ff develop # 然后把develop分支merge过来:

注意:

  1. git merge develop,不带参数的默认情况是执行快进式合并
  2. 而使用参数--no-ff则会执行正常合并,它会在master分支上生成一个新节点。
  3. merge的时候有冲突,需手动解决完后,重新addcommit后即可。

开个小差(番外篇)

Github上-搭建博客

将自已博客的网页代码文件,上传到Github上的gh-pages分支, 使用[github用户名].github.io/[仓库的名字]/[具体的页面]的方式来访问查看。

git使用ssh方式上传代码与github

  • git生成公钥和私钥
    • 命令:ssh-keygen -t rsa生成的公钥与私钥文件会在当用户目录的.ssh目录下.

未完待续。。。

  •  sourceTree
  •  tortoiseGit

评论