Git简明教程

Git介绍

Git是一款免费、开源的分布式版本控制系统。它是由Linux之父为了对抗收费版本控制软件BitKeeper开发的,有着一个相当传奇的故事(据说只花了一个月的时间!)

相对于Subversion和CVS的增量文件系统(存储每次提交之间的差异),Git将每次提交的文件的全部内容(snapshot)都会记录下来。相对于SVN的集中式,Git是分布式版本控制系统。

区别

集中式管理系统的代码统一的由一台服务器集中管理。其他系统必须从这一台服务器上拷贝和提交代码。这台服务器起到了一个集中管理所有代码的作用。

分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库。不同的电脑之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

科普

Git和Github的区别?
https://github.com/ GitHub就是一个基于Git的代码托管网站。由于其上聚集了大量的优秀代码和优秀程序员,使得它成为了一个极具价值的开发者社区。在GitHub上,你可以免费托管你的代码,进行版本控制,同别人协同开发。代码必须开源,付费用户可以选择私有项目。

原理

git中有两个空间,工作区版本库。当我们创建了本地代码仓库后,会在本地代码仓库的根目录中生成一个.git的隐藏文件。.git为一个文件目录,又叫做版本库。在本地代码仓库文件夹中,除.git目录之外的所有与.git同级的目录及其子目录都叫做工作区

工作区(Working Directory):仓库文件夹里除.git目录以外的内容
版本库(Repository):.git目录,用于存储记录版本信息
   暂缓区(stage)
   分支(master):git自动创建的第一个分支
   HEAD指针:用于指向当前分支
这里写图片描述

我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
处在分支(master)中的代码可以通过git push命令push到共享版本库(远程库)。

安装

Git安装比较简单。

Linux系统直接sudo命令安装:

sudo apt-get install git

或去官网下载资源包 https://git-scm.com/
https://www.kernel.org/pub/software/scm/git/

Mac下

你可以运行Xcode来安装,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以了。

Windows下

在官网下载win版:https://git-scm.com/download/win

因为Windows下要使用很多Linux/Unix的工具时,需要Cygwin这样的模拟环境,Git也一样。可以直接msysgit(打包好了Cygwin环境)。https://git-for-windows.github.io/

或者,如果是用Github可以直接下载客户端:https://desktop.github.com/

Git常用命令

1.初始化一个代码仓库
mkdir test2git
cd test2git
git init

2.如果使用git必须给git配置一个用户名和邮箱

给当前的git仓库配置一个用户名和邮箱
git config user.name “Sharp”
git config user.email “Sharp@xxx.com”

配置一个全局的用户名和邮箱
git config --global user.name “Sharp”
git config --global user.email “Sharp@xxx.com”

3.把文件添加到版本库
touch main.m : 创建了main.m
git add main.m : 将新添加的文件或者修改的文件添加到暂存区
git commit -m “初始化项目” (-m后面输入的是本次提交的说明)
git add . : 将所有没有被添加到暂存区或者代码仓库的文件添加到暂存区
注意:无论是新添加的文件或者修改的文件,都需要先通过add命令添加到暂存区中,之后再通过commit命令添加到本地仓库中

4.查看文件的状态 git status
红色 : 新创建的文件或者被修改的文件,没有被添加到暂存区
绿色 : 表示文件在暂存区,但是没有被添加到本地仓库中
git diff test.txt (看具体修改了什么内容)


5.给命令起别名
git config alias.st “status”
git config alias.ci “commit -m”
git config --global alias.st “status”

6.git删除文件
git rm 文件名

7.查看版本号
git log (可以查看提交历史,以便确定要回退到哪个版本)
git reflog (查看命令历史,以便确定要回到未来的哪个版本)
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit”
git lg

8.git的版本号是由sha1算法生成40位的哈希值,版本回退
git reset --hard HEAD : 回退到当前的版本
git reset --hard HEAD^ :  回退到上一个版本
git reset --hard HEAD^^ : 回退到上上个版本
git reset --hard HEAD~100 : 回退到前100版本
git reset --hard 版本号(前5位)

9.丢弃工作区的修改
git checkout -- readme.txt
丢弃暂存区,分2步:
先git reset HEAD file,再git checkout -- readme.txt
(如果误删,git checkout 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”)

10.远程仓库之创建SSH Key
ssh-keygen -t rsa -C "youremail@example.com" 会生成.ssh目录,里面有id_rsa和id_rsa.pub两个文件。
登陆GitHub,打开“Account settings”,“SSH Keys”页面。
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。

11.关联Github
git remote add origin git@github.com:Sharp/test2git.git
第一次:git push -u origin master
加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来
以后:git push origin master

12.从远程库克隆
git clone git@github.com:Sharp/test2git.git

13.分支管理
创建dev分支:
git checkout -b dev(-b参数表示创建并切换,相当于git branch dev
+ git checkout dev,注意这里checkout没有--)

合并分支:
git checkout master (切换到master分支)
git merge dev (合并某分支到当前分支)
git branch -d dev (删除分支dev)

14.可以看到分支合并图
git log --graph

15.Bug分支
git stash一当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug.
修复后,再git stash pop,回到工作现场.

16.多人协作,合并分支
查看远程库信息,使用git remote -v;
从本地推送分支,使用git push origin branch-name,如果别人也有更新导致推送失败,先用git pull抓取远程的新提交,如果有冲突,要先处理冲突。
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;

17.创建标签
命令git tag <name>用于新建一个标签,默认为HEAD
git tag v2.0 6224937(对历史commit id打标签)
git tag -a <tagname> -m "this is desc"可以指定标签信息;
命令git tag可以查看所有标签。

18.操作标签
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

19.忽略特特殊文件
忽略某些文件时,需要编写.gitignore;
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
example:https://github.com/github/gitignore

如果被忽略,强制添加:
git add -f App.class

查看哪个文件导致忽略:
git check-ignore -v App.class
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值