Git三种工程区域 & 文件状态

三种工程区域

  1. 版本库(Repository)

    在工作区中有一个隐藏目录.git,这个文件夹就是Git的版本库,里面存放了Git用了管理该工程的所有版本数据,里面存放了Git用来管理该工程的所有版本数据,也叫本地仓库

  2. 工作区(Working Directory)

    日常工作的代码文件或者文档所在的文件夹。

  3. 暂存区(stage)

    一般存放在工程根目录.git/index文件中。

三种文件状态

  1. 已提交(committed)

    该文件已经被安全的保存在了本地数据库中了;

  2. 已修改(modified)

    修改了某个文件,但还没有提交保存;

  3. 已暂存(staged)

    把已修改的文件放在下次提交时要保存的清单中。

Git常用命令

工程准备

工程克隆——git clone

查看工作区

查看工作区的修改内容——git diff

查看工作区的文件状态——git status

文件修改后提交推送

新增/删除/移动文件到暂存区——git add/ git rm/ git mv

提交更改的文件——git commit

推送远端仓库——git push

查看日志

查看当前分支上的提交日志——git log

分支管理

列出本地分支——git branch

新建分支——git branch/ git checkout -b

删除分支——git branch -d

切换分支——git checkout

更新分支——git pull

合并分支——git merge

撤销操作

强制回退到历史节点——git reset

回退本地所有修改而未提交的——git checkout

分支合并

合并目标分支内容到当前分支——git merge/git rebase

Git常用命令详解

工程准备

git clone 用于克隆远端工程到本地磁盘

执行命令git clone [URL]git lfs clone [URL]

注:如果所在项目git服务器已支持git-lfs,对二进制文件进行了区别管理,那么克隆工程的时候务必使用git lfs clone,否则克隆操作无法下载到工程中的二进制文件,工程内容不完整。

新增/删除/移动文件到暂存区

在提交你修改的文件之前,需要git add把文件添加到暂存区。

注:早期需要git add再提交,较新版本的git中不需要。

git rm 将指定文件彻底从当前分支的缓存区删除,因此它从当前分支的下一个提交快照中被删除。

也可以直接硬盘上删除文件,然后对该文件执行git commit,git会自动将删除的文件从索引中移除,效果一样。

git mv命令用于移动文件,也可以用于重命名文件。

例1:移动test.conf到config目录下:git mv test.conf config

例2: 将文件test.conf重命名为test1.conf:git mv test.conf test1.conf

查看工作区

git diff用于比较项目中任意两个版本(分支)的差异,也可以用来比较当前的索引和上次提交间的差异。

git status命令用于显示工作目录和暂存区的状态。

使用此命令能看到修改的git文件是否被暂存,新增的文件是否纳入了git版本库的管理。

提交更改的文件

git commit主要是将暂存区里的文件改动提交到本地的版本库

:提交这个动作是本地动作,是往本地的版本库中记录改动,不影响远端服务器。

git commit一般需要带描述信息,常见用法:git commit file_name -m “commit message”

如果要一次性提交所有在暂存区改动的文件到版本库,可以执行:git commit -am “commit message”

查看日志

git log用于查看提交历史

推送至远端仓库

在使用git commit命令将自己的修改从暂存区提交到本地版本库之后,可以使用git push将本地版本库的分支推送到远程服务器对应的分支。

常用推送命令格式:git push origin branch_name

本地分支名可以与推送到远端的分支名不同git push origin branch_name:new_branch_name

分支管理

git branch命令即可查看本地工程的所有git分支名称

git branch git checkout -b的异同:

相同点:

都可用于新建分支(默认基于当前分支节点创建)

不同点:

git branch新建分支后并不会切换到新分支;

git checkout -b新建分支后会自动切换到新分支。

常用的新建分支命令格式git brack new_branch_name / git checkout -b branch_name

git branch -dgit branch -D都可以用来删除本地分支后者大写表示强制删除

常用的删除分支命令格式git branch -d branch_name/git branch -D branck_name

删除服务器上的远程分支可以使用 git branch -d -r branck_name,其中branch_name为本地分支名。

删除后,还要推送到服务器上才行,即git push origin : branch_name

git checkout命令除了创建分支,还用来切换分支。

有时候,当前分支工作区存在修改而未提交的文件,与目的分支上的内容冲突,会导致checkout切换失败,这时候,可以使用git checkout -f进行强制切换。

常用切换分支命令格式git checkout branch_name

git pull的作用是从远端服务器中获取某个分支的更新在于本地指定的分支进行自动合并

常用的更新分支的命令格式git pull origin remote_branch:local_branch

如果远程指定的分支与本地指定的分支相同,则可直接指向git pull origin remote_branch

git fetch的作用是从远端服务器中获取某个分支的更新到本地仓库

注:与git pull不同,git fetch在获取到更新后,并不会进行合并操作,确认内容符合预期后,再决定是否手动合并节点。

常用的获取远端分支更新命令格式git fetch origin remote_branch:local_branch

如果远程指定的分支与本地指定的分支相同,则可直接执行git fetch origin remote_branch

分支合并

git merge命令是用于从指定的分支节点合并到当前分支的操作

git会将指定的分支与当前分支进行比较,找出两者最近的一个共同节点base,之后将指定分支在base之后的分离节点合并到当前分支上。分支合并,实际上市分支间差异提交节点的合并。

常用的切换分支命令格式git merge branch_name

git rebase用于合并目标分支内容到当前分支

常用合并命令格式:git rebase branch_name

注:git rebase、git merge背后的实现机制对合并后节点造成的影响有很大差异,各有风险存在。

撤销操作

git reset通常用于撤销当前工作区中的某些git add/commit操作,可将工作区内容回退到历史提交节点。

git checkout . 用于回退本地所有修改而未提交的文件内容。

注:它会用暂存区的所有文件直接覆盖本地文件,不给用户确认机会,谨慎使用。

如果仅仅只想退回某个文件的未提交改动,可以使用git checkout -filename来达到目的;如果想将工具区回退到某个提交版本,可以使用git checkout commit_id