前言: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.相关配置说明
user.name 及user.email
即:告诉git Who Are You(作为联系方式时的名字及邮箱,与远程仓库的邮箱无关)
如果没有配置联系方式,则git commit
时,会提示要先配置- 查看
所有远程仓库
及默认追踪的主机及远程分支
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.txt
或git 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.txt
或git 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)
表示这个版本号为当前版本,并且分支为mastercommit 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
origin22.查看所有远程库详细信息:
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.操作
缓存入栈 会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录
$ git stash save <message>
应用缓存
$ git stash apply <stash_name>
或$ git stash apply
默认为栈顶那个
说明:可以多次应用,及指定应用哪个。相当于session
对比
pop
$ git stash pop
只能应用栈顶,并且该对象出栈。即(只能应用栈顶并出栈)删除缓存
- 删除一个缓存
$ git stash drop <stash_name>
或$ git stash drop
默认为栈顶那个- 清除所有缓存
$ git stash clear
查看缓存
$ git stash list
stash@{0}: On vv: 在stash的第二次缓存
stash@{1}: WIP on vv: ded7993 第一次提交