Git 学习(一)

 

参考:

https://git-scm.com/book/zh/v1

https://www.cnblogs.com/smuxiaolei/p/7484678.html

https://www.cnblogs.com/lianghe01/p/5846525.html

 

一、git的几个区

git一共有四个区:本地工作区(随时更新工作的区域)、暂存区(git add)、本地仓库区(git commit),远程仓库区(git push)

在初始化git版本库之后会生成一个隐藏的文件 .git ,可以将该文件理解为git的版本库 repository,而我们自己建立的项目文件夹即工作区 working directory ,在.git 文件夹里面还有很多文件,其中有一个index 文件 就是暂存区也可以叫做 stage ,git还为我们自动生成了一个分支master以及指向该分支的指针head ,如下图   

git init 初始化新仓库,初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。不过目前,仅仅是按照既有的结构框架初始化好了里边所有的文件和目录,但我们还没有开始跟踪管理项目中的任何一个文件。)

请记住,工作目录下面的所有文件都不外乎这两种状态:已跟踪或未跟踪已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新,已修改或者已放入暂存区。而所有其他文件都属于未跟踪文件。它们既没有上次更新时的快照,也不在当前的暂存区域。初次克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,且状态为未修改。未跟踪的文件意味着Git在之前的快照(提交)中没有这些文件;Git 不会自动将之纳入跟踪范围。
在编辑过某些文件之后,Git 将这些文件标为已修改。我们逐步把这些修改过的文件放到暂存区域,直到最后一次性提交所有这些暂存起来的文件,如此重复。

二、git 一些简单的命令

  1. git add                                        开始跟踪一个新文件. 将当前目录下修改的所有代码从工作区添加到暂存区 . 代表当前目录
  2. git commit -m ‘注释’                    将缓存区内容添加到本地仓库
  3. git push [remote-name] :  [branch-name]   将本地版本库推送到远程服务器
  4. git status                                     检查当前文件状态
  5. git log                                          显示所有提交过的版本信息
  6. git reflog                                      可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
  7. git checkout  -- fileName             丢弃工作区的修改(-- 很重要,如果没有 -- 的话,那么命令变成创建分支了
  8. git branch                                    查看分支,会列出所有的分支,当前分支前面会添加一个星号
  9. git branch  [branch-name]           新建分支,但不会自动切换到这个分支中去
  10. git merge                                     合并指定分支到当前分支上  eg:git merge dev 
  11. git remote rename                       修改某个远程仓库在本地的简称 eg:git remote rename pb paul
  12. git branch –d [branch-name]       删除分支
  13. git remote rm [remote-name]       删除远程仓库
  14. git checkout  –b  [branch-name]  创建并切换分支,相当于如下2条命令:git branch dev   git checkout dev

  15. git diff                                           比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起                                                      来的变化内容。

  16. git commit  -a                             Git 就会自动把所有已经跟踪过的文件暂存起来一并提交

 

说明

git add

只要在 “Changes to be committed” 这行下面的,就说明是已暂存状态。如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中。
其实 git add 的潜台词就是把目标文件快照放入暂存区域,也就是 add file into staged area,同时未曾跟踪过的文件标记为需要跟踪。

Git 学习(一)_第1张图片

版本回退

第一种是:把当前的版本回退到上一个版本, git reset  --hard HEAD^ ;如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。
那如果要回退到前100个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:git reset  --hard HEAD~100 即可。

第二种是 git reset  --hard 版本号 (版本号通过git reflog 获取)

代码合并

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,其中<<>>>>fenzhi1 是指fenzhi1上修改的内容

Git clone

当你从远程库克隆时候,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且远程库的默认名称是origin。

推送分支

一般情况下,那些分支要推送呢?

master分支是主分支,因此要时刻与远程同步。
一些修复bug分支不需要推送到远程去,可以先合并到主分支上,然后把主分支master推送到远程去。

忽略某些文件

Git 学习(一)_第2张图片

git commit --amend  

1.有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。可以这样:

git commit -m 'initial commit'

git add forgotten_file

git commit --amend

 

2.如何取消暂存区域中的文件

git reset HEAD   文件回到了之前已修改未暂存的状态

git checkout  -- file  丢弃工作区的修改。即取消修改,回到之前的状态(也就是修改之前的版本)。在用这条命令前,请务必确定真的不再需要保留刚才的修改。

记住,任何已经提交到 Git 的都可以被恢复。即便在已经删除的分支中的提交,或者用 --amend 重新改写的提交,都可以被恢复。所以,你可能失去的数据,仅限于没有提交过的,对 Git 来说它们就像从未存在过一样。

git fetch [remote-name]

此命令会到远程仓库中拉取所有你本地仓库中还没有的数据。需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。

如果设置了某个分支用于跟踪某个远端仓库的分支,可以使用 git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。在日常工作中我们经常这么用,既快且好。实际上,默认情况下 git clone 命令本质上就是自动创建了本地的 master 分支用于跟踪远程仓库中的 master 分支(假设远程仓库确实有 master 分支)。所以一般我们运行 git pull,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中的当前分支。

-- 2019.11.05 增加

git reflog show --date=iso branchName 查看某分支提交记录及找到最初创建分支的信息
git diff branch1 branch2 --stat  显示两个分支的不同,没有--stat会显示出每个文件具体不同的地方

新分支正式打包提交时,需要再一次从master分支拉取一次。

新分支最好是从主分支迁移出,到最后要打包最后一刻再合代码。中途不要随意合其他分支的代码。不然摘除比较麻烦。

你可能感兴趣的:(git)