一、概念git reflog
二、常用命令
- 命令:
git init
,将目录变成Git可以管理的仓库 - 命令:
git add
,将文件添加到Git仓库,可以多次添加 - 命令:
git commit -m<message>
,将文件提交,只需一次提交 - 命令:
git log
,显示最近到最远的提交日志(–pretty=onelint,将多行合并一行) - 命令:
git reset --hard HEAD^
,回到上一个版本,在git中,HEAD表示当前版本,上一个版本就是HEAD^,上上个版本就是HEAD^^,如果是多个则使用HEAD~10(回到前10个版本) - 命令:
git reflog
,记录每次操作命令 - 命令:
git reset --hard commit_id
,回到指定版本 - 命令:
git diff HEAD -- <file>
,查看文件工作区版本和库中最新版本的区别
三、工作区和暂缓区关系
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
四、撤销修改
- 场景1:当改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令:
git checkout -- file
- 场景2:当不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令:
git reset HEAD <file>
,就回到场景1的情况,再安装场景1处理 - 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参版本回退方法(前提是没有推送到远程库)
五、删除文件
git checkout -- test.txt
其实是用版本库里的版本替换工作区的版本,无论工作区的是修改还是删除,都可以“一键还原”git rm
用于删除一个文件。如果一个文件已经被提交到版本库,那么永远不用担心误删,但要消息,只能恢复文件到最新的版本,会丢失最近一次提交后修改的内容
六、创建密钥
ssh-keygen -t rsa -C "youremail@example.com"
然后输入文件名id_rsa,连续空格键,在git包下即可找到id_rsa.pub文件里既是密钥
七、推送到远程服务
- 把本地master分支的最新修改推送至GitHub,命令:
git push origin master
- 克隆远程服务,例:
git clone git@github.com:michaelliao/gitskills.git
八、创建与合并
- 分支创建:
git checkout -b <name>
,在git checkout命令上添加-b参数表示创建并切换,name分支名 - 查看所有分支,
git branch
,当前分支前会有“*” - 合并分支,
git merge <name>
,合并指定分支到当前分支 - 删除分支,
git branch -d <name>
- 查看分支合并图,
git log --graph --pretty=online --abbrev-commit
九、分支管理策略
- Fast forward模式下,删除分支后会丢掉分支信息。
git merge --no-ff -m<message>
:表示禁用该Fast forward模式
十、Bug分支
2.Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作,git stash
2. git stash list
查看工作现场位置
3. 恢复工作现场方法,一种:git stash apply
,恢复后,stash内容并不删除,你需要用git stash drop
来删除;另一种:git stash pop
,恢复的同时把stash删除
十一、新功能
- 在开发一个新的feature,最好新建一个分支;如果要丢弃一个没有被合并过的分支,可以通过
git branch -D <name>
强行删除
十二、多人协作
当从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来,并且,远程仓库的默认名称时origin。查看远程库信息,使用命令:git remote
,或者git remote -v
显示更详细的信息
2. 推送分支git push origin master
,如果推送其他分支,比如dev,git push origin dev
十三、抓取分支
默认情况下,只能看到本地master分支,要在dev分支上开发,就必须远程创建origin的dev分支到本地,命令:git checkout -b branch-name origin/branch-name
例:git checkout -b dev origin/dev
- 本地新建的分支如果不推送到远程,对其他人就是不可见的
- 从本地推送分支,使用
git push origin branch-name
,如果推送失败,先用git pull
抓取远程的新提交,如果抓取失败,则需要建立本地分支与远程分支的链接git branch --set-upstream branch-name origin/branch-name
- rebase操作可以把本地未push的分叉提交历史整理成直线,
git rebase
十四、标签
- 查看标签信息,命令
git show <tag-name>
- 删除本地标签,命令:
git tag -d <tag-name>
, - 如果要推送某个标签到远程,使用命令:
git push origin <tag-name>
,或者,一次性推送全部尚未推送到远程的本地标签:git push origin --tags
- 如果标签已经推送到远程,要删除,则先删除本地:
git tag -d <tag-name>
,然后删除远程:git push origin :refs/tags/<tag-name>
十五、关联远程库
- 命令:
git remote add origin git@gitee.com:用户名/项目名.git