GIT 当今最流行的分布式版本控制工具

基本使用

git 配置

git config --global user.name  'yuhao'
git config --global user.email 'yuhaowin@126.com'
git config --local  user.name  'yuhao' && git config --local  user.email 'yuhaowin@126.com'

优先级: local > global > system

查看 git 配置信息

git config --list --global

新建 git 仓库

git init //在项目文件夹内执行 
git init projectName  //创建一个新的项目,并加入 git 管理

基本概念

git 工作区、暂存区

git 工作流程:把在工作区修改的内容,通过 git add 添加到暂存区,再一起提交到版本库。

暂存区具有承上启下的作用:

如果修改的内容合适,可以进一步变成一个正式的commit,如果内容不好,可以回退到未修改的工作区。

常用命令

把工作区的一个或多个修改文件加入到暂存区中。

git add 可以添加多个文件/文件夹 用空格分割
git add -u  将已经被git管理,但是发生了修改的文件一起提交到暂存区 u = update

查看当前分支状态

重命名版本库中的文件,如果直接在工作区修改了文件名,那么在 git 中的表现是删除了老的文件又新增的新的文件,可以通过 git status 查看。

git mv 旧文件 新文件  可以直接代替上面3个步骤

在暂存区直接删除文件

git rm 文件名
git checkout -b dev origin/dev 基于远端分支dev的最新提交创建一个本地分支dev,并将本地分支和远端分支建立关联关系。 
git checkout -b temp 36cc4b4976be439910  基于本地某个提交版本创建一个分支

git 版本比较

git diff //工作区和暂存区的内容比较
git diff --cached //本地当前分支和暂存区内容比较
git diff temp master -- <具体的文件> 比较两个commit之间的不同

常规需求

取消暂存区的修改

如果不想要暂存区中的修改了,将暂存区中修改的记录全部还原

git reset --hard <commitid>  回退到某个commit 工作区和暂存区都和这个commit一致
git reset --soft <commitid>  回退到某个commit 但是修改的内容还在。
git reset HEAD 的区别 取消暂存区的所有内容 保持暂存区和当前最新提交是一致的。

查看版本树变化过程

git log  		  只查看当前分支的所有 commit
git log 分支名  查看某个分支的 commit
git log --all  查看所有分支的 commit
git log --all --graph  查看所有分支的 commit 图形化界面
git log --oneline -n4  只看提交的注释  一共看4条

查看当前版本库分支数

git branch -v   查看有多少个分支  
git branch -av  -a参数是查看远程分支

本地分支和远端分支关联

git 创建分支时强烈建议本地分支和远端分支名称一致。

git创建的本地分支和远端分支关联的两种方法:

git  branch  --set-upstream-to=origin/dev  dev
git  push  --set-upstream  origin  dev

删除本地分支

git branch -d <BranchName>。-D 表示强制删除

删除原地分支

git push origin –-delete <BranchName>

删除远端仓库

git remote rm origin

分支的合并

进入分支,更新分支代码

(branch)git pull

切换主干

(branch)git checkout master

在主干上合并分支branch

(master)git merge branch --squash

提交合并后的代码

(master)git commit -m ‘合并备注’

将代码推送到远程仓库

(master)git push

进入主干,更新主干代码

(master)git pull

切换分支

(master)git checkout branch

在分支上合并主干

(branch)git merge master --squash

提交合并后的代码

(branch)git commit -m ‘合并备注’

将代码推送到远程仓库

(branch)git push

git 合并参考资料

仓库迁移

git 仓库迁移参考资料

提交本地项目到远端新仓库

将本地已有的 git 仓库 提交到 服务器

  1. gitlab / github 新建一个空的项目
  2. 获取到空项目的 地址 如:http://gitlab.infoepoch.com/rdd/weixin-miniapp.git
  3. 将本地项目加入到服务器
git remote add origin http://gitlab.infoepoch.com/rdd/weixin-miniapp.git
//其中 origin 只是远端仓库的一个别名,可以任意指定。
  1. 推送至服务器
git push -u origin master
//-u 表示 下次可以使用 git push 代替  git push -u origin master

参考资料

gti 推送至多个远端仓库

gti 推送至多个远端仓库参考资料

git 查看某一行代码的修改历史

git blame -L start,end file_name

显示格式为:

commit_id | 代码提交作者 | 提交时间 | 代码位于文件中的行数 | 实际代码

通过以下命令查看具体变化:

git show commit_id

一下内容待整理

分离头指针

意思是当前的变更没有和任何一个分支关联,

分离头指针的常常用于做一个尝试性的工作,并没有为改修改创建一个分支,随时准备丢弃掉

创建一个分离头指针的情况:

git checkout 544546

如果在544546这个提交基础上做了很多的修改,发现这些修改是有用的,可以通过为该commitid 创建分支的方法保留变更记录

git branch <新分支名> 544546


修改最新提交commit的message

git commit --amend


修改以前的commit的message(在本地完成,防止影响远端代码库)

git rebase -i 修改的commit的前一个commit

然后现在reword这种策略


本地将多个commit合并成一个commit

然后现在squash这种策略


取消暂存区内容修改

git reset HEAD


取消工作区内容修改

git checkout <文件名>

git stash

git stash list

git stash pop


探究 「.git」仓库内部

git中的对象分为 commit tree blob

文件 HEAD 存放的是当前工作分支的引用,切换分支,HEAD内容也会变化。

文件 config 存放和该仓库相关的配置文件,只对本仓库生效,是优先级最高的配置。

文件夹 refs 存放里 heads(所有的分支)tags(所有的标签)

文件夹 objects 存放该仓库所有的对象

todo

git diff

?> commit tree blob 三者之间的关系

任何文件的内容相同(即使文件名不同)也是同一个blob

将以往多个commit 合并成一个commit:

gitlab:

https://www.jianshu.com/p/b04356e014fa

https://blog.csdn.net/Z_Flank/article/details/80807458

https://blog.csdn.net/wq3028/article/details/81736486