从这快速入门的git,作者很棒,写的很详细。但他人的始终是他人的啊,自己还是需要整理自己的
git 安装与配置
git 直接官网下载,安装即可,地址:https://git-scm.com
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
安装后,配置全局身份,证明是你上传的:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
git config命令的
--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
单个项目配置身份名,在项目根目录下进行单独配置
git config user.name "Your Name"
git config user.email "email@xx.com"
git config --list
查看当前配置, 在当前项目下面查看的配置是全局配置+当前项目的配置, 使用的时候会优先使用当前项目的配置
工作区 和 暂存区
graph LR;
本地工作区-->|add file|暂存区;
暂存区-->|commit file|本地版本库;
本地版本库-->|push|远程版本库;
上图顺继续很重要,不能跳跃执行(commit 文件只会提交add过的文件,文件修改需要重新add,push只会推送commit过的文件)
工作区(Working Directory)
就是你在电脑里能看到的目录,即自己的工作目录
暂存区
就是使用add命令,将修改的部分添加到特定的区域,等待commit操作
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支
基本使用
初始化
git init //选取适合的空文件夹初始化仓库
git add README.md//添加本地文件
git commit -m "first commit"//提交到本地暂存区
git remote add origin https://github.com/shenwd/empty.git//关联远程服务器
git push -u origin master//推送到远程master分支
撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令
git reset HEAD file
,就回到了场景1,第二步按场景1操作。场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
删除文件
git rm file//删除本地文件
git commit file//提交文件删除的修改
git push // 上传
其实删除文件同样是对文件的修改,操作步骤一致
远程库操作
初始版本库连接与查看:
git clone <版本库的网址> //克隆版本库
git remote -v //查看远程库链接
git remote show <主机名>//查看该主机的详细信息。
git remote show//查看 remote 名
git remote add <主机名> <网址>//添加远程主机
git remote rm <主机名>//删除主机名
git remote rm <主机名>//远程主机的改名
版本跳跃
git log
查看最近到最远的提交日志
版本回退:
Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164…882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
恢复到指定版本git reset –hard commit id
git reflog // 可以查看历史所有版本的id
多人协作
多人协作的工作模式通常是这样:
- 首先,可以试图用git push origin branch-name推送自己的修改;
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
- 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch –set-upstream branch-name origin/branch-name。
需要熟悉的部分git 命令:
git remote -v;查看远程库信息
git push origin branch-name //推送相关分支到远程
git checkout -b branch-name origin/branch-name//在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致;
git branch --set-upstream branch-name origin/branch-name //建立本地分支和远程分支的关联
git pull origin branch-name //抓取分支到本地
标签管理 TAG
在Git中打标签非常简单,首先,切换到需要打标签的分支上,敲命令git tag 就可以打一个新标签:默认标签是打在最新提交的commit上的
git tag <tag-name> //用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag //查看所有标签:
git tag <tag-name> commit id//在历史提交的版本上(commit id)打标签
git show <tag-name> //查看标签信息
git tag -a v0.1 -m "version 0.1 released" 3628164 //创建带有说明的标签,用-a指定标签名,-m指定说明文字:
git tag -d <tag-name> //删除标签
git push origin <tag-name> //推送某个标签到远程
git push origin --tags //一次性推送全部尚未推送到远程的本地标签
删除远程标签:
git tag -d v0.9//先删除本地标签
git push origin :refs/tags/v0.9 //然后,从远程删除。删除命令也是push,但是格式不同
分支管理
基本操作
Git鼓励大量使用分支:
合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
禁止使用ff模式合并分支 –no-ff
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:* git branch -d *
强制删除: **git branch -D ××
git log –graph –pretty=oneline –abbrev-commit//待探究 查看合并分支操作 id
解决合并冲突
git diff //#是工作区(work dict)和暂存区(stage)的比较
git diff --cached // #是暂存区(stage)和分支(master)的比较
git diff HEAD //#查看工作区和版本库里面最新版本的区别
bug分支 stash
在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交:
Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
$ git stash
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge
现在,用git status查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。
确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支,修改完分支并合并后切换到工作分支
使用 * git stash list * 查看保存的所有工作
恢复:
git stash apply 恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了
接入github
检查本机是否已有ssh秘钥
没有秘钥使用一下命令进行创建:
ssh-keygen -t rsa -C "youremail@example.com"
github中添加ssh公钥
bash中使用ssh链接接入github
git remote add origin git@github.com:shenwd/empty.git