git主要由这几个分区组成,git的各类命令其实也是围绕这几个分区来展开的,接下来将经过这几个分区来理解git的各类操做;
git init
git clone
git add
git commit
git 切换分支时会把未add或未commit的内容带过去,这一点值得注意。为何呢?由于未add的内容不属于任何一个分支,未commit的内容也不属于任何一个分支。也就是说,对于全部分支而言,工做区和暂存区是公共的。
要想在分支间切换, 又不想又上述影响, 怎么办呢? git stash搞起。要注意,在当前分支git stash的内容, 在其余分支也能够git stash pop出来,为何? 由于:工做区和暂存区是公共的。
git push origin 分支名
git push = git fetch + git merge
有时候在git push的时候,经常会出现push被阻止的状况,这是由于远程仓库被其余人更新了,当前分支落后了其余人的commit,须要先将远程分支pull到本地工做区,再看有没有冲突(多人同时修改了一个文件),如有冲突则解决冲突之后再进行提交;但有时候还会出现git pull失败的状况:
这是由于本地工做区间跟远程仓库的新代码冲突了:
这时须要解决冲突后提交本地修改。
缓存区 除了开始出现外,后续提交代码、更新代码篇章都在打酱油;终于,此次冲突解决事件, 它将会是主角
解决冲突后提交本地修改的思路大概以下:
1.将本地修改的代码放在缓存区;
2.从远程仓库拉取最新代码;
3.拉取成功后再从缓存区将修改的代码取出, 这样最新代码跟本地修改的代码就会混杂在一块儿;
4.手工解决冲突后;
5.提交解决冲突后的代码;html
1.git pull 出现报错信息: error: Your local changes to the following files would be overwritten by merge: README.md Please, commit your changes or stash them before you can merge. Aborting 2.git stash 3.git pull 4.git stash pop
5.手工解决冲突后: git add README.md 6.git commit -m 'solve conflict' 7.git push origin
git reset --soft HEAD^
这样就撤销了commit操做,可是代码仍然保留了下来java
HEAD^的意思是上一个版本,也能够写成HEAD~1
若是你进行了2次commit,想都撤回,可使用HEAD~2git
--mixed 默认参数, git reset --mixed --soft HEAD^与 git reset --soft HEAD^是一个效果 --soft, 不删除工做空间改动代码,撤销commit,不撤销add --hard 删除工做空间改动代码,撤销commit,撤销add, 完成这个操做后就恢复到了上一次commit的状态 若是commit注释写错了,只是想改一下注释,只须要: git commit --amend 此时会进入默认vim编辑器,修改注释完毕后保存就行了。 撤销add git reset HEAD 若是后面什么都不跟的话 就是上一次add 里面的所有撤销了 git reset HEAD XXX/XXX/XXX.java 就是对某个文件进行撤销了
在git中,咱们使用git config 命令用来配置git的配置文件,git配置级别主要有如下3类:github
这个配置文件一般位于clone后代码仓库的.git隐藏目录下的config文件
这个配置文件一般位于
~/.gitconfig 文件,具体到你的用户。你能够经过传递 --global 选项使 Git 读或写这个特定的文件
/etc/gitconfig 文件:包含了适用于系统全部用户和全部库的值。若是你传递参数选项’--system’ 给 git config,它将明确的读和写这个文件
具体的操做指令就不在赘述,网上能搜索到不少相关的文档和资料;
在最近的一些学习过程当中,发现一个问题;若本地有两个不一样的代码仓库,想分别用不一样的用户去提交,该如何操做呢?
由上面的背景知识就能够知道,咱们可使用仓库的local级别配置文件来给每一个仓库设置不一样的用户;vim
git config user.name "wzj" git config user.email "wzj@qq.com"
这样就能够不一样仓库使用不一样用户去提交了;缓存
在学习过程当中,当clone后的仓库修改后,提交时却出现了编辑器
remote: Permission to bytewang123/basic.git denied to bytewong. fatal: unable to access 'https://github.com/byte/basic.git/': The requested URL returned error: 403
经过显式的在config文件的url中增长
https://git用户名@
github.com/...,便可解决学习
完整示例:fetch
[remote "origin"] url = https://git用户名@github.com/git用户名/仓库名.git
当运行 git status ,git会将本地分支dev与它正在跟踪的远程分支进行比较(origin/master)
,由于origin/master没有被改变,它仍然是当前dev分支(和origin/dev)后面的1提交/更改,因此会出现提示。url
参考文章:
https://www.cnblogs.com/cb032...
https://blog.csdn.net/w958796...
https://www.cnblogs.com/aries...
https://my.oschina.net/newcha...