优先级:--local > --global > --system
git
用了
--global
这个参数,表示你这台机器上全部的Git仓库都会使用这个配置github
git config --global user.name # 查看 git config --global user.name 用户名 # 修改 git config --global user.email # 查看 git config --global user.email 邮箱 # 修改 git config -l #查看 git config --global core.quotepath false #git status 乱码解决
git init 仓库名 #建立一个git仓库 git init #将一个项目转化为使用git管理(建立.git目录) git clone git185@192.168.1.411:./test185.git
示例:web
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j3rytJij-1581218159170)(…/Linux/pic/git-1.png)]bootstrap
目录结构:vim
project |------.git |--------branches |--------config #仓库的配置文件 |--------description |--------HEAD |--------hooks |--------info |--------objects |--------refs
隐藏目录
.git
不算工做区,而是Git的版本库bash
git status
最先,确定只有一台机器有一个原始版本库,此后,别的机器能够“克隆”这个原始版本库,并且每台机器的版本库其实都是同样的,并无主次之分服务器
实际状况每每是这样,找一台电脑充当服务器的角色,天天24小时开机,其余每一个人都从这个“服务器”仓库克隆一份到本身的电脑上,而且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交app
GitHub就是提供Git仓库托管服务的,因此,只要注册一个GitHub帐号,就能够免费得到Git远程仓库,即Github为咱们的git仓库提供了一个远程仓库,有了这个远程仓库,妈妈不再用担忧个人硬盘了ssh
本地git仓库和GitHub上的远程仓库之间的传输是经过SSH加密的,因此,须要一点设置:svg
建立ssh key:
ssh-keygen -t rsa -C "youremail@example.com"
登陆你的GitHub账号,Settings -> SSH and GPG keys -> new SSH key
,将id_rsa.pub的内容复制进去
为何GitHub须要SSH Key呢?由于GitHub须要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,因此,GitHub只要知道了你的公钥,就能够确认只有你本身才能推送
在有了本地git仓库后,还需建立对应的远程仓库
在GitHub上建立远程仓库(若是已有则省略)
为本地仓库设置远程仓库信息(若是同时须要为本地仓库添加多个远程仓库(若是github+码云),则能够将origin
分别换成github
和gitee
,推送操做时也要修改origin
。添加后,远程库的名字就是origin
,这是Git默认的叫法,也能够改为别的,可是origin
这个名字一看就知道是远程库)
git remote add origin https://github.com/用户名/仓库名
git remote remove origin
git remote set-url 新地址
git remote -v
将本地git仓库push到远程仓库
# 因为远程库是空的,咱们第一次推送master分支时,加上了-u参数,Git不但会把本地的 # master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master # 分支关联起来,在之后的推送或者拉取时就能够简化命令 git push [-u] origin 分支名
并非必定要把本地分支往远程推送。哪些分支须要推送、哪些不须要呢?
master
:主分支,要时刻与远程同步dev
:开发分支,团队全部成员都须要在上面工做,全部也须要与远程同步bug
:只用于在本地修复bug,就不必推送到远程了,除非老板要看看你每周修复了几个bug直接修改配置文件:
进入 SingTel/.git 目录 vim config 修改 [remote “origin”]下面的url便可
拉取分支:
git pull
git clone
时,默认状况下只能看到本地的master
分支。若是要在dev
分支上开发,就必须建立远程origin
的dev
分支到本地,可使用以下命令建立本地dev
分支:
git checkout -b dev
将本地dev
分支与远程origin/dev
分支关联起来:
git branch --set-upstream dev origin/dev
Bootstrap的官方仓库twbs/bootstrap、你在GitHub上克隆的仓库my/bootstrap,以及你本身克隆到本地电脑的仓库,他们的关系就像下图显示的那样:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kuCmGEwH-1581218159171)(…/Linux/pic/git-2.png)]
若是你想修复bootstrap的一个bug,或者新增一个功能,马上就能够开始干活,干完后,往本身的仓库推送
若是你但愿bootstrap的官方库能接受你的修改,你就能够在GitHub上发起一个pull request。固然,对方是否接受你的pull request就不必定了
隐藏目录.git
不算工做区,而是Git的版本库。版本库里存了不少东西,其中最重要的就是称为stage(或者叫index)的暂存区。还有Git为咱们自动建立的第一个分支master
,以及指向master
的一个指针叫HEAD
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zDHBHGSp-1581218159171)(…/Linux/pic/git-3.png)]
git add 文件/目录
git rm --cached 文件/目录
git rest HEAD [文件名]
git checkout -- [文件名]
git reset HEAD [文件名]
后使用若是修改了readme.txt,添加了文件LICENSE,并将2者添加到暂存区后,暂存区的状态就变成这样:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZCbTAFCs-1581218159172)(…/Linux/pic/git-4.png)]
git commit -m '信息'
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3NesbVEb-1581218159172)(…/Linux/pic/git-5.png)]
commit至关于游戏里面一次存档。对应一个版本
git diff [选项] # 查看工做区中的修改 git diff [选项] --staged # 查看已添加到暂存区的修改 git diff [选项] HEAD # 查看当前全部未提交的修改 选项: --color-words: 颜色 --stat: 不显示具体修改,只显示修改了的文件
git reset --hard 版本ID/HEAD形式的版本 git reset --hard HEAD # 当前版本 git reset --hard HEAD^ # 上一个版本 git reset --hard HEAD^^ # 上上个版本 git reset --hard HEAD~n # 前n个版本 git log --prtty=oneline # 查看最近到最远提交日志 git reset --hard 3628df # 回退版本号码:回退版本commit id为3628df git reflog # 想要恢复:使用命令记录来找回commit id回退
若是回到过去的版本,想要回到原来新的版本:
git reflog
查看版本,再经过上述命令回去新版本git log [选项] 选项: --online:只显示提交提示信息 --stat:添加每次提交包含的文件信息 --path:查看每次提交改变的内容 --graph
加文件名能够显示具体文件相关的全部提交信息
———> git add files git commit working directory--------------stage-------------history <——— git checkout --files git reset --files
rm read.txt (从版本库中删除) git rm read.txt git commit -m "delete" (删错了) git checkout -- read.txt
(分支名字dev) 建立分支:git branch dev 切换分支:git checkout dev 建立+切换分支:git checkout -b dev 查看当前分支:git branch 切换回master分支:git checkout master 合并指定分支到当前分支:git merge dev (fast-forward 快进模式) 删除分支:git branch -d dev
(分支名字fea) 冲突缘由:master和Dev同时增加。 git checkout -b fea (修改Creating a new branch is quick AND simple.) git add read.txt git commit -m "fea" git checkout master (修改Creating a new branch is quick & simple.) git addread.txt git commit -m "master" (此时造成了master和fea各自指着一个分支) git merge fea (合并错误,git status , cat read.txt能够查看) (修改read.txt的文本内容 Creating a new branch is quick and simple.) git add read.txt git commit -m “conf” (如今master和fea指向同一我的点了,git log可查看合并状况) git branch -d fea
(--no-ff)(分支名字dev 文件名字read.txt) git checkout -b dev git add read.txt git commit -m "dev" git checkout master (注意下个参数--no-ff,表示禁用fast forward) (fast forward合并看不出曾经作过合并,而--no-ff参数合并后的历史有分支,negative看出曾经作过合并) git merge --no-ff -m "merge with --no-ff" dev (查看分支历史 git log --graph --pretty=oneline --abbrev-commit)
(bugg分支为要解决bug的分支) 思想:当手头还有工做时,先将工做现场git stash(避免bug修复好后将为完成的工做一块儿提交),而后修复bug、提交以后,在用git stash pop将原来的工做显示在工做区 。 (git status查看状态) git stash git checkout -b bugg (修改bug后) git add bugg.txt git commit -m "fixed bug" git checkout master git merge --no-ff -m "merge bug" bugg git branch -d bugg (接下来回到dev上继续工做) git checkout dev (查看工做区git status) (用git stash list查看) git stash list (恢复的第一种方法:恢复的同时把stash内容同时删除) git stash pop (恢复的第二种方法:恢复的同时不删除stash内容) git stash apply (若使用第二种方法想删除stash则用git stash drop) (如果多个文件stash 可用git stash apply stash@{0}恢复指定的stash)
(分支为dev) (在没彻底完成合并时强行删除) git branch -D dev
(查看远程库信息) git remote (查看远程库更详细信息) git remote -v
推送dev分支
git push origin dev
(克隆) git clone git@github.com:TaylorApril/test.git (查看能见分支 git branch) (在dev分支上开发,建立远程origin的dev分支到本地) git checkout -b dev origin/dev (修改后,进行提交) git commit -m "add" git push origin dev (在他提交以后你再push的状况时) (指定本地dev分支与远程origin分支连接) git branch git pull git commit -m "fixed" git push
报错1 $ git push -u origin master To git@github.com:TaylorApril/test.git ! [rejected] master -> master (fetch first) error: failed to push some refs to 'git@github.com:TaylorApril/test.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. 解决: git pull --rebase origin master git push -u origin master
报错2 $ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 1 commit. (use "git push" to publish your local commits) 解决: git push