Git简介
Git是一个开源的分布式版本控制软件,用来管理项目版本
版本控制:
1.备份 2.方便团队协同开发
安装
官网
下载:
一路默认 点下一步
测试:
git --version
git --help
Git中的四个工作区域
工作目录(Working Directory)
暂存区(Stage/Index)
资源库(Repository或Git Directory)
git仓库(Remote Directory)
Git 文件的四种状态
Git的工作流程:
1.在工作目录中添加、修改文件;
2.在需要进行版本管理的文件放入暂存区域;
3.将暂存区域的文件提交到Git库
因此,git管理的文件有三种状态:已修改(modified)、已暂存(staged)、已提交(committed)
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然有可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
Git不关心文件两个版本之间的具体区别,而是关心文件的整体是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用SHA-1算法计算文件的校验和。
Git常用命令
git branch 查看本地所有分支
git status 查看当前状态
git commit 提交
git branch -a 查看所有分支
git branch -r 查看远程所有分支
git commit -am "init" 提交并且加注释
git remote add origin git@192.168.1.119:ndshow 远程添加
git push origin master 将文件给推到服务器
git remote show origin 显示远程库origin里的资源
git push origin master:develop 推送
git push origin master:hb-dev 将本地库与远程服务器上的库进行关联
git checkout --track origin/dev 切换到远程dev分支
git branch -D master develop 删除本地库 develop
git checkout -b dev 建立一个本地分支dev
git merge origin/dev 将分支dev与当前分支进行合并
git checkout dev 切换到本地dev分支
git remote show 查看远程库
git add . 将所有文件都添加
git rm 文件名(包括路径) 从git中删除指定文件
git clone git://github.com/schacon/grit.git 从服务器上将代码拉下来
git config --list 看所有用户
git ls-files 看已经被提交的
git rm [file-name] 删除一个文件
git commit -a 提交当前repos的所有改变
git add [file name] 添加一个文件到git index
git commit -v 当你使用-v参数可以看到commit的差异
git commit -m "This is the message describing the commit" 添加commit信息
//-a 用于提交跟踪过的文件,untracked的文件还是无法提交
git commit -a -a是代表add,把所有的change加到git index里然后再commit
git commit -am '注释' 与-a是一致的,但是可以添加注释
git commit -a -v 一般提交命令
git log 看你commit的日志
git diff 查看尚未暂存的更新
git rm a.a 移除文件(从暂存区和工作区中删除)
git rm --cache a.a 移除文件(只从暂存区和工作区删除)
git commit -m "remove" 移除文件(从git中删除)
git rm -f a.a 强行移除修改后文件(从暂存区和工作区删除)
git diff --cached 或 git diff --staged 查看尚未提交的更新
git stash push 将文件给push到一个临时空间中
git stash pop 将文件从临时空间pop下来
git remote add origin git@github.com:username/Hello-world.git
git push origin master 将本地项目给提交到服务器中
git pull 本地与服务器端同步
git push (远程仓库名)(分支名)将本地分支推送到服务器上去
git push origin serverfix:awesomebranch
...
初始化版本库,并提交到远程服务器端
mkdir WebApp
cd WebApp
git init
touch README
git add README
git commit -m 'first name'
git remote add origin git@github.com:daixu/WebApp.git
Git配置用户签名
作用:
签名的作用就是用来标识用户,以区分不同的开发人员
设置方式:
1.为单个仓库单独设置,这种方式只针对单个仓库有效
2.另一种是全局配置,采用这种方式配置后,所有仓库有效。如果对两种方式都进行了配置,那么会优先使用单个仓库配置的配置信息。
配置格式
方式1.单个仓库有效
git config user.name wzl(用户名)
git config user.email xxx@xx.com(邮箱)
用户名和邮箱自行设置
邮箱可以是假邮箱,只要符合邮箱格式即可
这种方式配置信息会保存再当前仓库目录下的.git/config文件中,打开查看发现保存的格式为:
[user]
name = wzl
email = wang2001zilong@126.com
方式2.全局有效
git config --global user.name wzl(用户名)
git config --global user.email xxx@xx.com(邮箱)
这种方式配置信息会保存在系统盘的系统用户目录下的.gitconfig文件中,保存格式同上
建议
一般情况下都是配置为全局有效即可,简单,不用为每个仓库都设置签名,当需要为某个仓库配置不同信息是,只需要单独为这个仓库按照方式1配置一下即可。
Git初始化本地库
初始化命令
git init
git目录
git目录是为你的项目存储所有历史和元信息的目录,包括所有的对象(commit,trees,blobs,stags),这些对象指向不同的分支。
每个项目只能有一个git目录,这个叫.git的目录在你的项目的根目录下(默认,但不是必须的)
$>tree -L 1
.
|-- HEAD #这个git项目目前处在哪个分支里
|-- config #项目的配置信息,git config命令去启动它
|-- description #项目的描述信息
|-- hooks/ #系统默认钩子脚本目录
|-- index/ #索引文件,暂存区(stage)
|-- logs/ #各个refs的历史信息
|-- objects/ #git本地仓库的所有对象(commit,trees,blobs,tags)
|-- refs/ #标识你项目里的每个分支指向了哪个提交(commit)
查看Git状态
命令
git status
状态
git status 命令表示:文件、文件在工作区、暂存区的工作状态
1.changes to be committed:表示文件已经从工作区add到暂存区的file,可以通过git restore --staged filename命令将该file从暂存区移出,只有工作去有该文件,该文件就为Untracked files。
2.changes not staged for commit:表示工作区、暂存区都存在的file,在工作区进行修改或删除,但没有add到暂存区,可以通过git add file 命令将变更(修改、删除)的file add到暂存区,此时该file没有changes not staged for commit状态,也就是changed not staged for commit没有改file的记录了。可以通过git restore file的命令取消在file在工作区的变更,那么暂存区的file内容还是以前的,并且file在changed not staged for commit 状态下没有记录。
3.untracked files:表示只在工作区有的file,也就是在暂存区没有该file
实例演示
$ touch test.html //touch这里可以理解为新建文件
>
$ git status
>
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: index.html
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.html
$ git add test.html
>
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: index.html
new file: test.html
$ git commit -m 'first commit'
[master (root-commit) 9188f6d] first commit
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 index.html
create mode 100644 test.html
$ git status
>
On branch master
nothing to commit, working tree clean
$ vim test.html
>
使用vim命令进入vim编辑界面
按“i”插入光标,进入insert模式
输入内容完成后,按esc回到正常模式
输入“:wq”,完成保存并退出(:w保存 :q退出)
$ git status
>
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: test.html
no changes added to commit (use "git add" and/or "git commit -a")
第一种方法---------省略add过程--------------------------------------------------------
$ git commit -am "second commmit"
>
warning: in the working copy of 'test.html', LF will be replaced by CRLF the next time Git touches it
[master 75c9afc] second commmit
1 file changed, 1 insertion(+)
第二种方法-------------------------------------------------------------------------
$ git add test.html
>
$ git commit -m 'second commit'
>
------------------------------------------------------------------------------
$ git status
On branch master
nothing to commit, working tree clean