【GIT】git个人笔记

GIT个人手册

版本

日期

修订内容

作者

V01

2019-06-25

初稿

备注:

使用中不断迭代完善,其他人使用中有其他总结的,可以补充。

目录

第一章 说明

一.1.1 GIT 中文手册

一.1.2 git仓库说明(工作区、暂存区、本地仓、远程仓)1

一.1.3 git仓库说明(工作区、暂存区、本地仓、远程仓)2

四.1.1  取远程仓代码

四.1.2 取本地仓代码

四.2 git init Git 创建仓库

四.3 git clone拷贝项目

四.4 git branch分支管理:查看/新建/删除

四.5 git status 查看状态

四.6 git checkout于切换分支或恢复工作树文件

四.7 git diff 显示区别

四.8 git commit将缓存区内容添加到仓库

四.9 git commit -a 直接本地提交到仓库

四.10.6 git tag打标签

四.11 GIT 学习(在线实操)

四.11.2 git命令之add,commit,push

四.11.3 git add提交的文件的信息添加到暂存区中

四.11.4 git commit将暂存区中的文件提交到本地仓库中

四.11.5  git push 命令

四.11.6 git fetch

四.13 合并分支git merge/git rebase

四.13.1 git merge合并两个分支的

四.13.3 merge、rebase、cherry-pick、revert

四.13.4 reset(恢复某版本之后的不要)和revert(恢复某版本到下一版本)

四.13.5 理解HEAD,master

四.13.6 Github中fork 和 clone的区别 pull request

四.14.1 常见错误

五.1.1 解决git status不能显示中文

五.1.2 解决git bash 终端显示中文乱码

五.2 通过修改配置文件来解决中文乱码


第一章 说明

一.1.1 GIT 中文手册

https://cloud.tencent.com/developer/section/1138656

一.1.2 git仓库说明(工作区、暂存区、本地仓、远程仓)1

我们先来理解下Git 工作区、暂存区和本地仓概念

工作区:

就是你在电脑里能看到的目录。

暂存区:

一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

版本库:

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:

image.png

图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。 

图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。 

图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。 

当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。 

当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响

当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变。 

当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操很危险,会清除工作区中未添加到暂存区的改动

当执行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

一.1.3 git仓库说明(工作区、暂存区、本地仓、远程仓)2

git有好几个区,工作区(workspace)、暂存区(index)、本地仓库(local repository)、还有远程仓库(remote repository)。远程仓库为我们保存一份代码,如github,而工作区、暂存区和本地仓库都在本地,这也就是为什么我们在没有网络的环境下也能使用git提交(commit)代码,因为提交仅仅是提交到本地仓库中,待有网络之后在推送(push)到远程仓库。

 image.png

第二章 提交代码的一个完整流程

由上面的内容,不难发现,从一开始的git status命令,根据相关提示,引出了其他相关命令。下方是对其相关命令的总结:

git status : 查看当前仓库中文件的状态。

git status -s : 文件状态的简写(M - 修改, A - 添加, D - 删除, R - 重命名,?? - 未追踪)。

git add <文件名> :将后方紧跟的文件进行暂存,以便commit使用。

(git add == git stage,推荐使用git stage代替git add,git add 只是为了和旧命令兼容)

git reset HEAD <文件名> : 将已经暂存的文件进行撤销,回到未暂存的状态。

git checkout -- <文件名> :撤销对尚未暂存文件的修改,该操作不可逆,慎用。

git commit -a : 对那些被修改的文件单尚未暂存和提交的文件进行暂存和提交。注意:对未暂存的新增文件无效。

git commit : 对暂存区的文件进行提交到本地仓库。

git push : 将本地仓库已经提交的内容发布到远端。

(我们团队提交的 git push origin  HEAD:refs/for/xxxx

先提交到HEAD:refs/for/下的分支,构建测试。

如:git push origin HEAD:refs/for/CI_2/spaDev)

第三章 GIT 使用规范

git使用规范 - 风蓝6 - 博客园

第四章 简略

四.1 git fetch /pull/checkout拉取代码

 

四.1.1  取远程仓代码

四.1.1.1 例子

例子1:

如果本地代码有修改则 先将本地的代码做本地提交:

git commit -m “change log...”

git fetch orign  //拉取服务器上的代码

git branch -a //查看全部分支

git  rebase  remotes/origin/tb_gl5118b_dev_v1.9_ble  //将拉取的代码合并到本地

 例子2:

//查询当前远程的版本

$ git remote -v

//获取最新代码到本地(本地当前分支为[branch],获取的远端的分支为[origin/branch])

$ git fetch origin master  [示例1:获取远端的origin/master分支]

$ git fetch origin dev [示例2:获取远端的origin/dev分支]

//查看版本差异

$ git log -p master..origin/master [示例1:查看本地master与远端origin/master的版本差异]

$ git log -p dev..origin/dev   [示例2:查看本地dev与远端origin/dev的版本差异]

//合并最新代码到本地分支

$ git merge origin/master  [示例1:合并远端分支origin/master到当前分支]

$ git merge origin/dev [示例2:合并远端分支origin/dev到当前分支]

原文:https://blog.csdn.net/hanchao5272/article/details/79162130 

四.1.1.2 git fetch

git fetch将远程主机的最新内容拉到本地仓,用户在检查了以后决定是否合并到本地工作本目录

$ git fetch  <远程主机名>  //这个命令将某个远程主机的更新全部取回本地

$ git fetch  <远程主机名>  <分支名>取回特定分支的更新,可以指定分支名

$ git fetch  origin  master  最常见的命令如取回origin 主机的master 分支

取回更新后,会返回一个FETCH_HEAD ,指的是某个branch在服务器上的最新状态,我们可以在本地通过它查看刚取回的更新信息:

$ git log -p FETCH_HEAD

git fetch后的合并:

四.1.1.3 git pull 

git pull 将远程主机的最新内容拉下来到本地工作目录后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

git pull 的过程可以理解为:

git fetch origin master       //从远程主机的master分支拉取最新内容 

git merge FETCH_HEAD    //将拉取下来的最新内容合并到当前所在的分支中

即将远程主机的某个分支的更新取回,并与本地指定的分支合并,完整格式可表示为:

$ git pull  <远程主机名>  <远程分支名>:<本地分支名>

如果远程分支是与当前分支合并,则冒号后面的部分可以省略:

$ git pull origin next

//查询当前远程的版本

$ git remote -v

//直接拉取并合并最新代码

$ git pull origin master [示例1:拉取远端origin/master分支并合并到当前分支]

$ git pull origin dev [示例2:拉取远端origin/dev分支并合并到当前分支]

原文:https://blog.csdn.net/hanchao5272/article/details/79162130 

四.1.2 取本地仓代码

git checkout迁出一个分支的特定版本。默认是迁出分支的HEAD版本


一此用法示例:

$ git checkout  master            #//取出master版本的head。

$ git checkout  tag_name         #//在当前分支上 取出 tag_name 的版本

$ git checkout  master file_name  #//放弃当前对文件file_name的修改

$ git checkout  commit_id  file_name  #//取commit_id提交版本的file_name

$ git checkout -b dev/1.5.4 origin/dev/1.5.4

# 从远程dev/1.5.4分支取得到本地分支/dev/1.5.4

$ git checkout -- hello.rb

#这条命令把hello.rb从HEAD中签出.

$ git checkout .

#这条命令把 当前目录所有修改的文件 从HEAD中签出并且把它恢复成未修改时的样子.

#注意:在使用 git checkout 时,如果其对应的文件被修改过,那么该修改会被覆盖掉。

https://www.yiibai.com/git/git_checkout.html 

四.2 git init Git 创建仓库

git init          当前目录创建

git init newrepo   在newrepo目录创建

$ git add *.c                          

$ git add README

$ git commit -m '初始化项目版本'

以上命令将目录下以 .c 结尾及 README 文件提交到仓库中。

四.3 git clone拷贝项目

git clone <repo>           :从现有 Git 仓库中拷贝项目(类似 svn checkout)。

git clone <repo>  <directory>:克隆到指定的目录

$ git clone <版本库的网址> <本地目录名>

$ git clone GitHub - tensorflow/tensorflow: An Open Source Machine Learning Framework for Everyone

或者使用SSH协议:

$ git clone git@github.com:tensorflow/tensorflow.git

例子:

$ git  clone  git://github.com/schacon/grit.git

$ git  clone  git://github.com/schacon/grit.git  mygrit

几种效果等价的git clone写法:

git clone http://github.com/CosmosHua/locate new

git clone http://github.com/CosmosHua/locate.git new

git clone git://github.com/CosmosHua/locate new

git clone git://github.com/CosmosHua/locate.git new

四.4 git branch分支管理:查看/新建/删除

git branch    查看本地分支(同git branch -l),

git branch -r //查看远程所有分支

git branch -a //查看本地和远程的所有分支

git branch <branchname> //新建分支

git branch -d <branchname> //删除本地分支

git branch -d -r <branchname> //删除远程分支,删除后还需推送到服务器
git push origin:<branchname>  //删除后推送至服务器

git branch -m <oldbranch> <newbranch> //重命名本地分支

1、每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支”。

2、任何时候,HEAD所指向的分支就是当前分支

3、执行git reset命令HEAD指向reset命令后的事件的时间标记点

HEAD~是当前分支(时间线)上的时间标记点,包括HEAD、HEAD^、HEAD^^、HEAD~

(摘自:关于Git分支中HEAD和Master的理解 - 知乎)

HEAD~1指回退一个快照,可以简写为HEAD~
HEAD~2指回退两个快照,

HEAD^主要是控制merge之后回退的方向
HEAD~才是回退的步数

四.6 git checkout于切

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值