Git简明教程

来源:互联网 发布:创意英文淘宝店铺名 编辑:程序博客网 时间:2024/05/16 09:11

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 test2gitcd test2gitgit init2.如果使用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.mgit 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 lg8.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 Keyssh-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.关联Githubgit remote add origin git@github.com:Sharp/test2git.git第一次:git push -u origin master加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来以后:git push origin master12.从远程库克隆git clone git@github.com:Sharp/test2git.git13.分支管理创建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 --graph15.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>用于新建一个标签,默认为HEADgit 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