git分布式版本库管理

前言:Git操作好在会一路提醒(操作结果,撤销提醒,配置提醒等),本文章意在看懂其提醒,且覆盖平常的操作及相关配置或使用。

零、配置

1.操作

  • git config 命令用于获取并设置存储库或全局选项。这些变量可以控制Git的外观和操作的各个方面

配置作用域
--system 系统配置(所有用户)
--global 当前用户
--local 当前仓库
(默认是添加在 local 配置中)

git config [--local|--global|--system] --edit可以进入编辑模式,及可以看到对应配置所在的目录位置

  • --system配置。在git安装目录下/Git/mingw64/etc/gitconfig
  • --global配置。在当前用户目录下C:/Users/Administrator/.gitconfig
  • --local配置。在当前项目目录下.git/config

默认编辑器的使用下面有介绍

查看配置
1.查看所有配置git config [--local|--global|--system] --list
. git config --list 列出该处找到的所有设置(不会覆盖)

  • git config --system --list 查看系统配置(所有用户)
  • git config --global --list 查看当前用户配置
  • git config --local --list 查看当前仓库配置

2.查看特定Key的配置git config [--local|--global|--system] {key}

  • git config {key} 列出该处找到的所有指定key值(会覆盖,该作用域有多个该值也只会返回一个值)
  • git configc --system {key} 列出该作用域的指定key值
  • 其它作用域略

3.查看特定Key的所有配置 git config [--local|--global|--system] --get-all {key}

  • git config --get-all {key} 列出该处找到的所有指定key值(不会覆盖)
  • git config --system --get-all {key} 列出该作用域的所有指定key值(不会覆盖)
  • 其它作用域略

4.添加配置项
格式:git config [--local|--global|--system] --add section.key value

5.修改配置项
格式:git config [--local|--global|--system] section.key value

6.清除配置项
格式:git config [--local|--global|--system] --unset {key}
如果该key有多个值,要删除某个值
则:git config [--local|--global|--system] --unset {key} value
如果该key有多个值,要删除所有值
则:git config [--local|--global|--system] --unset-all {key}

编辑模式
git config [--local|--global|--system] --edit
此时会打开编辑窗口,底下可以看到配置文件的所在目录
默认编辑器的使用教程
修改默认编辑器:git config [--local|--global|--system] core.editor code 前提是配置了该code的path路径

2.相关配置说明

  1. user.name 及user.email 即:告诉git Who Are You(作为联系方式时的名字及邮箱,与远程仓库的邮箱无关)
    如果没有配置联系方式,则git commit时,会提示要先配置
  2. 查看所有远程仓库默认追踪的主机及远程分支 git config --list拉到底下会看到

remote.hcl.url=https://github.com/zwyellin/hu.git //配置了的主机
remote.hcl.fetch=+refs/heads/:refs/remotes/hcl/
remote.origin11.url=https://github.com/zwyellin/hu1.git //配置了的主机
remote.origin11.fetch=+refs/heads/:refs/remotes/hcl/


branch.master.remote=origin11 //绑定的默认主机
branch.master.merge=refs/heads/dev1 //这里是绑定的远程分支
push.default=upstream //这里是push方式:有simple nothing等具体看下面push部分
branch.tt.remote=origin11
branch.tt.merge=refs/heads/dev1
branch.jj.remote=origin11
branch.jj.merge=refs/heads/kk
branch.vv.remote=origin11
branch.vv.merge=refs/heads/vv

本地分支与远程仓库联系关系总结

  • git config --list拉到底下会看到所有远程仓库本地分支默认追踪的主机及远程分支
  • 查默认追踪:或者git status 底下可以看到
  • git branch -a查看所有分支
  • git remote -vv查看所有远程仓库
  • git branch -vv查看本地分支默认追踪的主机及远程分支
  • git remote show 主机名查看远程主机及分支对应的本地分支

这边补充查看本地是不是最新代码(其它同事push上去的)
切换分支时,可以看到底下的提示。如下:

  • Your branch is behind 'origin/master' by 30 commits, and can be fast-forwarded.
    (use "git pull" to update your local branch)
    说明:你的分支落后于远程仓库30个版本,并且可以快进模式(采用git pusll 来更新你的本地分支)

一.初始化

1.操作

  • 创建版本库:git init
  • 如果创建成功,底下紧接会出现:Initialized empty Git repository in <file>

2.查看情况

git status 查看状态信息

nothing to commit (create/copy files and use "git add" to track)


说明:
track英 [træk] 追踪
即:创建或者copy文件,然后使用git add命令追踪文件

二、提交追踪(第一次提交到暂存区)

1.操作

  • 添加到暂存区:git add <file>git add test.txtgit add .
  • 如果添加成功,表面没有任何反应
  • 说明: 如果没有配置用户名和eamil,则会提示,配置好即可

2.查看情况

git status 查看状态信息

Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: test.txt


说明:

  • Changes to be committed:等待commit
  • (use "git rm --cached <file>..." to unstage) 可以把add 提交追踪命令撤销
  • new file: test.txt:此时,被追踪文件的文件名为绿色

3. 相关操作

git rm --cached <file>
说明:删除暂存区或分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制
即:可以把add 提交追踪命令撤销


相关命令
git rm <file>
说明:删除暂存区或分支上的文件, 同时工作区也不需要这个文件了

说明:任何修改,都要commit与版本库保持一致。

三、提交到版本库

1.操作

  • 添加到版本库:$ git commit -m '这里是这次提交的说明'
  • 如果添加成功,底下紧接会出现:

[master (root-commit) 62a5a89] 这里是这次提交的说明
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test.txt


说明:

  • [master (root-commit) 62a5a89] 这里是这次提交的说明 这个是这次提交的信息
  • 1 file changed, 0 insertions(+), 0 deletions(-) 变动情况 (有:增删改)
  • create mode 100644 test.txt

说明:
使用命令git add <file>,注意,可反复多次使用,添加多个文件;
然后使用命令git commit -m <message>,提交到版本库。

2.查看情况

git status 查看状态信息

nothing to commit, working tree clean


说明:

  • nothing to commit, working tree clean 没有要提交的了,工作区干净

四、修改,git state(和初始化时对比)

1.修改文件

。。。

2.查看情况

git status 查看状态信息

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: test.txt


说明:

  • (use "git checkout -- <file>..." to discard changes in working directory) (使用“git checkout - <file> ...”来丢弃工作目录中的更改)

3. 相关操作

git checkout -- <file>
说明:从暂存区复原到工作区
对比:git checkout 分支名 这个是切换分支


相关命令
git reset HEAD <file>
说明:从版本库复原到暂存区
对比: git reset --hard HEAD^ 这个是版本回退


即:如果还木有commit,都可以撤销。从暂存区复原和从版本库复原,并且这两个命令都有其它作用

五、修改,并且git add了(和第一次add对比)

1.操作

  • 添加到暂存区:git add <file>git add test.txtgit add .
  • 如果添加成功,表面没有任何反应

2.查看情况

git status 查看状态信息

Changes to be committed:对比 一样
(use "git reset HEAD <file>..." to unstage)对比 (use "git rm --cached <file>..." to unstage)
modified: test.txt 对比 new file: test.txt


对比下来:差不多,第一次提交会提示你git rm --cached <file>可以撤销版本跟踪,new file: test.txt

3. 相关操作

git reset HEAD <file>
说明:从版本库复原到暂存区
对比: git reset --hard HEAD^ 这个是版本回退


相关命令
git checkout -- <file>
说明:从暂存区复原到工作区
对比:git checkout 分支名 这个是切换分支


即:如果还木有commit,都可以撤销。从暂存区复原和从版本库复原,并且这两个命令都有其它作用

六、修改,并且git commit了(和第一次commit对比)

1.操作

  • 添加到版本库:$ git commit -m '这里是这次提交的说明'
  • 如果添加成功,底下紧接会出现:

[master a1f8a81] 这里是这次提交的说明 对比 [master (root-commit)62a5a89] 这里是这次提交的说明
1 file changed, 2 insertions(+), 1 deletion(-) 对比 1 file changed, 0 insertions(+), 0 deletion(-)
对比 create mode 100644 test.txt


说明:

  • (root-commit)说明该本地库第一次提交,而非后续的提交
  • [master a1f8a81] 这里是这次提交的说明 这个是这次提交的信息
  • 1 file changed, 0 insertions(+), 0 deletions(-) 变动情况 (有:增删改)
  • create mode 100644 test.txt

对比下来:差不多,第一次提交会提示你这个是第一次提交:root-commit、create mode 100644 test.txt

2.查看情况

git status 查看状态信息

nothing to commit, working tree clean


说明:

  • nothing to commit, working tree clean 没有要提交的了,工作区干净

七、已经提交两次了,查看版本

1.操作

  • 查看提交历史:$ git log
  • 底下紧接会出现:

commit ae7586b9ec516ecbe98ad96a1a248c3aea61c3c5(HEAD -> master)
Author: 这里是用户名 这里是用户邮箱
Date: Wed Jan 30 10:37:08 2019 +0800
第二次提交
commit 93ad57c2c11647e74b2cae4dfbe0e24e1c68a2e8
Author: 这里是用户名 这里是用户邮箱
Date: Wed Jan 30 10:36:28 2019 +0800
第一次提交


说明:

  • (HEAD -> master) 表示这个版本号为当前版本,并且分支为master
  • commit ae7586b 这个是提交的版本号(版本号我们使用可以取前7位即可)
  • 作者的名字和电子邮件地址
  • 提交时间
  • 显示提交说明

相关命令
查看提交日志:$ git reflog
查看对比


对比

  • $ git log 是版本库从HEAD查所有的提交(即:只能查到在版本库里面的)
  • $ git reflog 是查看提交的日志,包括删除的,保存在本地

2. 相关操作

git reset --hard HEAD^ 版本回退
eg:git reset --hard HEAD^/git reset --hard HEAD^^/git reset --hard HEAD~2/git reset --hard commitID
说明:版本回退

操作后信息
HEAD is now at 93ad57c 第一次提交 即HEAD指向了版本号为93ad57c的版本号

对比:git reset HEAD <file> 这个是从版本库复原到暂存区

八、创建分支及提交到远程仓库

1.操作

  • 创建分支:$ git branch 分支名$ git branch dev
  • 如果添加成功,表面没有任何反应
  • 这边补充,如果远程仓库还没有在本电脑生成凭据
    则,第一次git push, 则,要填写远程仓库的登入
    查看及编辑该凭据查看下面介绍。

2.查看分支

git branch 查看本地分支

dev
* master 带*的为当前分支


branch命令总结

  • $ git branch <BranchName> 创建本地分支
  • $ git push origin 本地分支名:远程分支名 创建远程分支

  • $ git branch -d <BranchName> 删除本地分支
  • $ git push origin --delete dev2 删除远程分支
  • $ git push origin :<old_branch> 提交空分支到远程已有分支,即相当于置空即:删除

:(改名字)

  • $ git branch -m <old_branchName> <new_branchName> 修改本地分支名
  • 1.删除远程分支 ; 2.再次提交本地分支到远程 修改远程分支名

  • git branch 查看本地分支
  • git branch -a 则显示本地和远程分支
  • git branch -vv(两个v),就能够看到本地分支跟踪的远程分支

和远程建立联系

  • $ git push --set-upstream <remote> 本地分支:远程分支
    --set-upstream 简写-u
  • $ git branch -vv 查看当前分支追踪的远程分支 √

本地分支与远程仓库联系关系总结

  • git config --list拉到底下会看到所有远程仓库本地分支默认追踪的主机及远程分支
  • git branch -a查看所有分支
  • git remote -vv查看所有远程仓库
  • git branch -vv查看本地分支默认追踪的主机及远程分支
  • git remote show 主机名查看远程主机及分支对应的本地分支

总结

  • git branch 用于增删改查分支。及和远程仓库建立联系
  • git push命令用于将本地分支的更新,推送到远程主机
  • $ git push <远程主机名> <本地分支名>:<远程分支名>
  • 说明:从本地仓库推送到远程仓库

相关命令

  • $ git pull <远程主机名> <远程分支名>:<本地分支名>
  • 说明:从远程仓库更新本地仓库

总结

  • 这两个命令就是建立本地仓库和远程仓库的联系
  • 也可以省略不写远程分支名,则默认提交到和本地分支同名的分支(没有则创建)
简化版的push、pull
1.省略不写远程主机及分支:则要配置远程分支
  $ git push --set-upstream <remote> 本地分支:远程分支
  简写:$ git push -u <remote> 本地分支:远程分支
  则下次可以直接使用:$ git push 

2.如果本地分支名和远程分支名不一样。则还要配置:
     git config --global push.default upstream
  网址:https://www.jianshu.com/p/b4e3b6bba837

查看配置:
>>branch.master.remote=origin11   //`绑定的默认主机`
>>branch.master.merge=refs/heads/dev1 //`这里是绑定的远程分支`
>>push.default=upstream  //`这里是push方式:`

push.default可用的值如下:
    1.nothing  不推送,出错会提醒,相当于提交测试
    2.current  推送当前分支到接收端名字相同的分支。
    3.upstream  推送当前分支到上游@{upstream}:即可以不用同名字
    4.simple  推送当前分支到上游相同的分支:即必须同名(没有创建)。默认值
    5.matching  推送本地仓库和远程仓库所有名字相同的分支。
这边补充关于远程仓库的用户名和密码的保存问题

1.***查看保存位置:控制面板\用户帐户\凭据管理器 点击windows凭据

2.***可以修改,及删除该凭据

远程仓库的用户名和密码的保存问题

九、remote操作

1.操作

  • $ git remote命令管理一组跟踪的存储库

git remote add [shortname] [url]
shortname:远程仓库的别名 url:远程仓库的地址
其它:push 服务器 分支名。也可以为远程创建分支

git remote remove <name>

1.改名字git remote rename <old> <new>
2.改地址 git remote set-url <name> <newurl> [<oldurl>]
3.增地址 git remote set-url --add <name> <newurl> [<oldurl>] 可以同时push多个仓库

1.查看当前的远程库git remote
origin1
origin2

2.查看所有远程库详细信息git remote -vv
origin1 https://github.com/zwyellin/last1.git (fetch)
origin1 https://github.com/zwyellin/last1.git (push)
origin2 https://github.com/zwyellin/last2.git (fetch)
origin2 https://github.com/zwyellin/last2.git (push)

3.查看某个远程库所有信息git remote show <remote> 如:git remote show origin1
*remote origin1
Fetch URL: https://github.com/zwyellin/last1.git
Push URL: https://github.com/zwyellin/last1.git
HEAD branch: master
Remote branches: //这边列出远程的分支
dev tracked
dev1 tracked
kk tracked
master tracked
Local branches configured for 'git pull': //这边列出pull操作时和远程建立的联系
jj merges with remote kk
master merges with remote dev1
tt merges with remote dev1
Local ref configured for 'git push'://这边列出push操作时和远程建立的联系
master pushes to master (up to date)


本地分支与远程仓库联系关系总结

  • git config --list拉到底下会看到所有远程仓库本地分支默认追踪的主机及远程分支
  • git branch -a查看所有分支
  • git remote -vv查看所有远程仓库
  • git branch -vv查看本地分支默认追踪的主机及远程分支
  • git remote show 主机名查看远程主机及分支对应的本地分支

十、从远程clone一个仓库

1.操作

  • 克隆: $ git clone <版本库的网址> <本地目录名>
  • 如果添加成功,表面没有任何反应

十一、合并分支

1.操作

git merge 其它分支名 合并分支 eg:git merge prod

  • Fast-forward 快进模式
  • 格式:git merge 其它分支名git merge --ff 其它分支名的简写
  • 说明:当前分支执行prod分支。即:快进模式
  • 说明:这种情况,需要这两个分支没有冲突情况下。
//没有冲突情况:
Fast-forward  //这边提示,Fast-forward模式。真正的Fast-forward模式
test.txt | 1 +

//有冲突的情况:
Auto-merging test.txt //自动合并:test.txt
CONFLICT (content): Merge conflict in test.txt  //冲突(内容):合并冲突在text.txt
Automatic merge failed; fix conflicts and then commit the result.//自动合并失败,修复后再提交

说明:
这个情况下,不是真正的Fast-forward模式,此时,prod分支和当前分支合并,处理冲突
解决冲突后,在当前分支需要add commit push等操作

这个情况下,不管有没有冲突,删除prod分支,则在当前分支看不到prod分支信息,除非git reflog


  • --no-ff 模式 即:not ffFast-forward非快进模式
  • git merge --no-ff -m '提交信息' 其它分支名
  • 说明:prod分支的复制文件和当前分支合并
  • 冲突情况和前面一样解决

区别

  • Fast-forward 快进模式是直接两个分支合并:如果删了prod分支,除非git reflog ,否则看不到prod提交信息
  • --no-ff是其它分支的复制和当前分支的合并:所以,尽管删了prod分支,仍然可以看到prod提交信息
  • 补充:如果在处理冲突,则可以看到目录后面(master|MERGING) 即(当前分支|冲突中...),也可以通过git status 查看情况
git命令窗口:

Administrator@SKY-2018031619 MINGW64 /d/360MoveData/Users
/Administrator/Desktop/gitStudy (master|MERGING)
git status

十二、stash操作

1.操作

缓存入栈 会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录

  1. $ git stash save <message>

应用缓存

$ git stash apply <stash_name>$ git stash apply默认为栈顶那个
说明:可以多次应用,及指定应用哪个。相当于session


对比 pop
$ git stash pop只能应用栈顶,并且该对象出栈。即(只能应用栈顶并出栈)

删除缓存

  1. 删除一个缓存$ git stash drop <stash_name>$ git stash drop默认为栈顶那个
  2. 清除所有缓存$ git stash clear

查看缓存

$ git stash list
stash@{0}: On vv: 在stash的第二次缓存
stash@{1}: WIP on vv: ded7993 第一次提交

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容