项目级别优先于系统用户级别,二者都有的话采用项目级别
# 下面配置的是当前操作系统用户的配置
git config --global user.name "wuleibegreat"
git config --global user.email "[email protected]"
# 下面配置的是项目级别的配置
git config user.name "wuleibegreat"
git config user.email "[email protected]"
git config --list # 就可以看到配置的信息了
git是通过工作区域、暂存区域和Git仓库来管理的
1、在工作目录中添加,修改文件
2、将需要进行版本管理的文件放入到暂存区域
3、将暂存区域的文件提交到Git仓库
已修改、已暂存、已提交
1、首先在整个的工程文件夹下面进行git仓库的初始化
git init
2、然后建立一个readme.md的文件,然后将这个文件添加到暂存区,或者将所有的文件提交到暂存区域
git add readme.md
git add ./*
然后为这次提交来一个说明解释,同时将暂存区的文件添加到了本地仓库中去了
这个要add一次commit一次
不然下面再add,然后再次commit,就会把之前的文件也commit上相同的。
git commit -m "add a project file" <文件名>
当然也可以直接一步到位
git commit -am "add new version"
3、查看状态
git status
如果突然不想加载这个文件了,类似于撤回,使用下面的命令可以将最近添加到暂存区的文件进行撤回
git reset HEAD <文件名>
4、取消暂存区文件的追踪
git rm --cached <文件名>
如果一旦对文件进行了修改,直接用上述的git add ,然后git commit覆盖掉暂存区域的文件。
想要将文件的修改撤销,可以将暂存区域的文件返回,替换掉修改的文件,就得使用下面的命令
git checkout -- <文件名字>
查看历史提交
git log
下面的图,从左往右,依次是工作区、暂存区、本地仓库
回到上一个版本,加几个波浪线就是指向上面第几个版本的快照,当然也可以在后面加数字,波浪线加数字
但是这个只是修改了本地仓库和暂存区域的版本,并没有修改工作区域!(工作区域还是最新的版本)
这个是默认的,影响了暂存区域和本地仓库两个地方,所以你需要重新add 然后再commit
(ps:记住HEAD是本地仓库的指针,是指向本地仓库的各个版本)
git reset --mixed HEAD~
或者下面这个,和上面那个命令是一样的
git reset HEAD~
下面介绍两种不一样的
下面这个soft就不一样了
git reset --soft HEAD~
下面这个hard会改变三个区域
git reset --hard HEAD~
总结:上面soft只影响本地仓库;默认的,会影响到本地仓库和暂存区;hard会影响三个全部
如果想回滚到特定的版本,加上特定的git hash值就可以了(当然也可以往前滚)
git reset a234sd678
回滚个别文件(这个时候head指针没有改变)(git log)就可以看到所有的提交版本的hash值
git reset 版本快照 文件名/路径
对比版本的步骤是这样的:
首先将文件上传到本地仓库以后,这个时候修改当前工作区域的文件
此时当前工作区域的文件和本地仓库的文件不一样了,想要对比上次上传的文件和此时的区别,使用下面的
git diff
比较任意两个版本的代码就用
git diff 版本ID1 版本ID2
如果只是比较之前的某个版本和当前工作区的区别
git diff 版本ID
比较暂存区域和仓库的区别
git diff --cached 版本ID
有时候只更正了某个文件的一点点代码,没必要更新仓库中整个项目,这个时候用下面的命令
(这个时候应该已经使用了git add命令,也就是说暂存区内的项目是更新过好的,然而没有推到仓库,这个时候我们只想把改好的暂存区的推到仓库,但是并不像增加一个新的版本)
git commit --amend
就会进入到了一个vim界面,这时候暂存区修改的代码啥的已经推上去了,你只需要更新下提交说明就可以了。
如果你不想进入vim界面的话
git commit --amend -m "新的说明"
删除文件
git rm 文件名字
git -f rm 文件名字
但是这个命令删除的只是工作目录和暂存区域的文件(必须一样,不然就只能强制删除),也就是取消跟踪,在下次提交的时候不纳入版本管理,但是在仓库中还是存在这个文件的
可以退回到之前的版本就可以了
如果只是想删除暂存区的文件,只需要
git rm --cached 文件名
修改文件名字(工作区和暂存区就都会修改了)
git mv 旧文件名 新文件名
1、创建分支
git branch 分支名字
使用下面的命令可以查看head指针指向哪里,这个时候就会发现,head指针指向了master的分支
git log --decorate
或者可以这么显示,一行只显示一个版本
git log --decorate --oneline
git log --decorate --online --graph --all
2、切换分支
git checkout 分支名
这个时候就会发现,head指针指向了其他的分支
合并分支的命令
git merge 分支名
如果出现合并的冲突,无非是是相同名字的文件,内容却不一样,这个需要改一下,这个会反应在文件中,注意看文件中各个分支的名字
修改更好之后,把修改好的文件进行git add 和git commit就可以了
删除分支
git branch -d 分支名字
git branch --delete 分支名字
匿名分支是没有名字的分支,在里面所做的任何更改都不会被保留的
如何将head指向匿名分支呢,比如说现在只有一个master的分支,没有任何分支,使用下面的命令,下面的命令本来是切换分支的
但是没有分支,这个时候切换到的就是匿名分支了
在这个分支下面你可以疯狂做实验,因为这里是不会被保存的
git checkout head~
如果做完实验,你切换回主分支就可以了,就不会被保存,但是如果实验做的比较好,你又想保存这个分支的话
注意看终端给你的提示,使用下面的命令在当前分支创建新的分支
git branch
下面讨论一下checkout命令:
事实上checkout命令有两种功能,注意返回到哪个版本,工作目录里就是哪个版本了
1、从历史快照(或者暂存区域)中拷贝文件到工作目录
2、切换分支
下面重点区分下checkout和reset的区别,
区别
首先在恢复文件上面:
在恢复快照上面:
1、首先在github网站上面创建一个仓库,这个仓库有它的特定的地址
但是我们每次往这个地址上推送的时候就很不方便,因为这个网址还是比较长的,那么我们可以把这个地址在我们的电脑上设置一个别名
2、下面的命令是在自己的电脑上为我们这个仓库的地址设置别名的
git remote add myseglab_complete https://github.com/wuleibegreat/myseglab_complete.git
然后用下面的命令可以看下如何取回(fetch)和推送(push)代码了
git remote -v
3、推送操作,下面这个就是将master这个分支的推送到我们的仓库里面了
git push 远程仓库地址 远程分支名字
git push myseglab_complete master
这个是我的仓库的token,需要代替密码进行操作
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wl6
4、克隆操作,把这个仓库里面的东西克隆到本地,有三个效果:
git clone https://github.com/wuleibegreat/myseglab_complete.git
5、邀请其他人一起编辑仓库
进入到github仓库中——>setting界面——>collaborators(填写你要邀请的账号,点击add collaborator)——>右上角(copy invite link)——>发送邀请链接——>点击接受就可以了
6、拉取操作
pull = fetch + merge
具体就是
git fetch 远程库地址别名 远程分支名
git merge 远程库地址别名/远程分支名
git fetch orgin master //将远程仓库origin的master分支下载到本地当前branch中(这里的origin是仓库名字,master分支)
git log -p master ..origin/master //比较本地的master分支和origin/master分支的差别
git merge origin/master //进行合并
7、冲突的解决
如果说别人更新了一版最新的版本上去了,但是你下载的还是之前的版本,那么你写完提交的时候就提交不上了,因为你不是最新的版本。
8、跨团队协作
9、SSH方式推送
ssh-keygen -t rsa -C 登录的邮箱地址
然后就会在/home下面生成/.ssh文件,里面有id_rsa,id_rsa.pub
然后复制id_rsa.pub里面的内容(全部复制),到用户setting的界面,里面有个SSH and GPG keys——>new ssh keys,粘贴到下面,title随便写
到仓库里面复制SSH的地址,创建别名myseglab_complete
git remote add myseglab_complete SSH地址
然后查看下ssh的信息
git remote -v
然后推送
git push myseglab_complete master
这个好处就是不用再搞账号密码了,直接SSH就可以完成(平时设置一个账号的可以用)