一、git相关概念
- git:分布式版本控制系统(Linus用C语言开发);
- 版本库(repository):由git管理的一个目录,git可以跟踪每一个文件的修改、删除,即工作区中的.git目录;
- 工作区:在电脑上能看到的目录;
- 暂存区(stage):存于版本库中;
二、git相关操作
1.git安装
(1)对于Windows而言,从Git官网直接下载安装程序,按默认选项安装即可;
(2)配置name和Email:
git config --global user.name "Name"
git congig --global user.email "Email"
2.创建git仓库:
在所需目录下执行如下命令,目录中产生.git文件夹则创建成功;
git init
3.提交到本地仓库
(1)将要提交的文件添加到暂存区:
git add 文件路径
(2)将缓存区的文件提交到仓库:
git commit -m "提交的说明"
4.查看仓库状态
git status
5.比较文件差异
比较工作区与暂存区的文件差异:
git diff 文件路径
比较工作区与版本库里最新版本的文件差异:
git diff HEAD -- 文件路径
6.查看最近到最远的提交日志
查看commit id、提交人、提交日期、提交说明:
git log
只查看commit id和提交说明:
git log --pretty=oneline
7.版本回退
回退到过去的一个版本HEAD^,回退两个版本HEAD^^,回退100各版本HEAD~100:
git reset --hard HEAD^
回去到未来的一个版本:
(1)先查找到要回退的版本的commit id,该命令可以查看历史命令:
git reflog
(2)使用commit id回退:
git reset --hard commit_id(不用写全也可以)
8.撤销修改
丢弃工作区的修改,即回到最近一次add或commit的状态:
git checkout -- 文件路径
把还未commit的暂存区的文件撤销重新放回到工作区:
git reset HEAD 文件路径
提交到版本库后可以通过版本回退撤销文件;
9.删除文件
工作区删除文件:
rm 文件名
版本库删除文件:
git rm 文件路径
git commit -m "delete file"
恢复版本库里的文件:
git checkout -- 文件路径
10.添加远程仓库
(1)创建SSH Key(在Windows用户主目录下的.ssh目录中的id_rsa私钥和id_rsa.pub公钥文件):
ssh-keygen -t rsa -C "Email"
(2)在远程仓库(GitHub、GitLab等)中添加id_rsa.pub文件的内容;
(3)在远程仓库中创建一个仓库;
(4)关联远程仓库:
git remote add origin git@github.com:CorlorfulXuan/MyRepo.git
(5)第一次push本地仓库的当前分支到远端仓库的master分支:
git push -u origin master
使用-u参数可以指定默认主机,之后可以直接git push或:
git push 主机名 分支
注:第一次使用clone或push会弹出ssh警告,yes回车即可。
11.删除远程仓库
(1)查看远程库信息:
git remote -v
(2)删除:
git remote rm origin
12.克隆仓库
克隆所有分支:
git clone git@github.com:CorlorfulXuan/MyRepo.git
13.创建分支
(1)创建分支
git branch dev
(2)切换分支
git checkout dev
以上两条命令可以用一条,创建分支并切换到这个分支:
git checkout -b dev
14.查看分支
git branch
15.合并分支
git merge dev
16.删除分支
git branch -d dev
17.解决冲突
当两个分支合并时文件都有新的不一样的提交时,需要手动解决冲突,在提交。
查看分支合并图:
git log --gragh
18.分支管理策略
Git合并分支时会默认使用Fast forward模式,这种模式下删除分支后会丢失分支信息,可以使用如下命令合并分支保留历史分支信息:
git merge --no-ff -m "合并说明" dev
19.bug分支
(1)暂时将工作分支储藏:
git stash
(2)q切换到master分支创建临时分支:
git checkout master
git checkout -b bug_dev
(3)修复bug提交
(4)切换到master分支合并临时分支:
git checkout master
git merge --no-ff -m "merge bug" bug_dev
(5)回到原工作分支:
git checkout dev
(6)查看stash的内容:
git stash list
(7)恢复stash的内容:
git stash apply stash@{0}
(8)删除stash的内容:
git stash drop stash@{0}
第(7)和(8)可以使用一个命令,恢复的同时删除:
git stash pop stash@{0}
(9)将master分支修复的内容同步到正在工作的分支上:
git cherry-pick commit_id
commit_id为修复bug时commit的id。
20.Feature分支
(1)创建一个功能分支:
git checkout -b feature_1
(2)开发并提交;
(3)切换到master分支:
git checkout master
(4)功能取消,强制删除未合并的功能分支:
git branch -D feature_1
21.多人协作
从远程仓库clone时,Git会自动的把master分支和远程的master分支对应起来,远程仓库的默认名称为origin。
一般会推送主分支master、开发分支dev到远程仓库与远程同步,bug分支一般不用推送到远程仓库,feature分支是否推送取决于是否功能时合作开发。
(1)试图推送自己的修改:
git push origin 分支名
(2)如果远程分支比本地分支新,需要先拉取远程分支试图合并,如果当前分支设置了跟踪远程分支,pull会自动抓取后合并该远程分支到当前分支:
git pull
(3)如果有冲突,则需要解决冲突后在本地提交,再次push。
22.关联分支
在本地分支创建和远程分支对应的分支:
git checkout -b 本地分支名 远程仓库名/远程分支名
已有本地分支的情况下,建立本地分支和远程分支的关联:
git branch --set-upstream-to=远程仓库名/远程分支名 本地分支名
23.rebase操作
可以把本地未push的分支提交历史整理成直线,使得我们在查看历史提交的变化时更容易。
git rebase
24.创建标签
(1)切换到需要打标签的分支:
git checkout 分支名
(2)打标签
默认打在最新提交的commit:
git tag 标签名
打在之前的commit上:
git tag 标签名 commit_id
创建带有说明的标签:
git tag -a 标签名 -m "说明" commit_id
(3)查看标签
查看所有标签名:
git tag
查看标签信息:
git show 标签名
25.操作标签
删除标签:
git tag -d 标签名
推送单个标签到远程分支:
git push origin 标签名
推送所有标签到远程分支:
git push origin --tags
删除远程的标签:
(1)先删除本地标签;
(2)再删除远程标签:
git push origin :refs/tags/标签名
26.关联多个远程仓库
git remote add github git@github.com:CorlorfulXuan/myrepo.git
git remote add gitee git@gitee.com:CorlorfulXuan/myrepo.git