Git使用指南
文本文件,可以体现内容的变化
二进制文件,只能体现文件大小的变化
创建版本库
设置git信息
-
用户名
- 命令 git config --global user.name “用户名”
-
邮箱
- 命令 git config --global user.email “电子邮箱”
建立仓库
-
建立目录
-
初始化仓库
- 命令 git init
添加文件到版本库
-
1、添加文件
-
命令 git add [文件名]
- 一次一个文件
-
-
2、提交到版本库
-
命令 git commit -m “提交的说明”
- 提交说明内容要便于查看文件修改的情况"
- 一次提交多个文件
-
版本管理
查看工作区状态
- 命令 git status
查看文件被修改内容
- 命令 git diff [文件名]
版本回退
-
1、查看提交历史
- 命令 git log -pretty=oneline
-
2、查看命令历史
- 命令 git reflog
-
2、回退操作
-
第一种命令 git reset --hard commit_id
- commit_id 版本号前几位就可以,只要能找到就行
-
第二种命令 git reset --hard HEAD^
-
HEAD指向的版本是当前版本
- ┌────┐
│HEAD│
└────┘
│
│ ○ append GPL
│ │
└──> ○ add distributed
│
○ wrote a readme file
- ┌────┐
-
HEAD^ 代表上一版本
-
HEAD~100 往上100个版本
-
-
工作区和暂存区
-
工作区(Working Directory)
- 就是电脑里的目录
-
版本库(Repository)
-
工作区里的隐藏目录(.git)
- 暂存区(stage或index)
- 自动创建的第一个分支master
- HEAD指针,指向当前版本ID
-
-
文件添加到版本库,分两步
-
第一步:从工作区添加到暂存区
- git add [文件名]
-
第二步:从暂存区内容提交到当前分支
- git commit -m “版本说明”
-
管理修改
-
Git管理的不是文件而是修改,比如添加字符或删除字符,添加一个文件等
-
每次在工作区修改文件后,都必须先添加到暂存区后才能被提交到版本库的分支中
-
查看工作区和版本库里的区别
- 命令 git diff HEAD --[文件名]
撤销修改
-
第一种,修改还未添加到暂存区
- 命令 git checkout – [文件名]
- 操作后,使工作区内容和版本库当前内容一致
- 等于直接丢弃工作区修改
-
第二种,修改已经添加到了暂存区
- 命令 git reset HEAD <文件名>
- 操作后,从暂存区删除该文件的修改,并且工作区恢复到,添加到暂存区时的状态
- 等于回到了第一种状态,然后再按第一种的方式撤销工作区修改
-
第三种,修改已经提交到了版本库
- 命令 git reset --hard [版本ID]
- 操作后,直接进行版本回退
- 前提是没有推送到远程库,否则远程库的内容还是存在,无法回退
删除文件
-
删除也是一个修改
- 第一步:从工作区删除文件
- 第二步:git rm [文件名] 或者 git add [文件名]
- 第三部:git commit -m “版本说明”
-
恢复删除的文件
-
从版本库里恢复最新版的文件,但是提交后的对文件的修改无法被恢复
-
未提交到版本库的文件删除后,无法被恢复
-
命令 git checkout – [文件名]
- 这条命令其实使用版本库的版本替换工作区的版本,无论是对工作区的修改还是删除都可以“一键恢复”
-
或者 回退到其他版本 git reset --hard 版本号
-
远程仓库
GitHub
-
生成SSH秘钥
- 命令 ssh-keygen -t rsa -C “youremail@example.com”
- 主目录的.ssh目录下有公钥和私钥
-
登录GitHub添加秘钥
- 公钥id_rsa.pub中的内容
- 有多台电脑的话,都需要生成秘钥后添加
-
免费版的GitHub内容所有人都能看到,除非交费才能作为私人仓库
-
添加远程仓库
-
添加远程仓库
- 命令 git remote add origin git@github.com:bravew2016/learngit.git
-
把本地仓库的变化连接到远程仓库主分支[新仓库不需要这一步]
- 命令 git pull origin master
-
第一次推送本地仓库的master分支的所有内容
- 命令 git push -u origin master
-
此后推送每次修改的内容
- git push origin master
-
-
克隆远程仓库
- 命令 git clone git@github.com:bravew2016/learngit.git
- GitHub支持https和SSH方式传输,SSH是支持原生的协议,速度最快
-
分支管理
-
创建分支
- 命令 git branch <分支名>
-
查看分支
- 命令 git branch
-
切换分支
- 命令 git checkout <分支名> 或 git switch <分支名>
-
合并分支
-
合并某分支到当前分支
- 命令 git merge <分支名>
-
-
创建并切换分支
- 命令 git checkout -b <分支名> 或 git switch -c <分支名>
-
删除分支
- 命令 git branch -d <分支名>
-
-
解决冲突
-
当要合并的分支和当前分支存在冲突内容时,职能合并无冲突的部分,有冲突的部分无法自动合并,需要手动修改为我们希望的内容,再提交
-
查看冲突
- 合并命令 git merge <分支名>
- 命令 git status
- Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
-
修改有冲突的内容后
-
执行提交
- git add [冲突文件]
- git commit -m “版本说明”
-
-
删除要有冲突的分支
- 命令 git branch -d <分支名>
-
-
查看分支合并图
- 命令 git log --graph --pretty=oneline --abbrev-commit
-
-
分支管理策略
-
master应该很稳定,只用来发布新版本
-
平时干活应该在dev分支上进行
-
各人员在自己的分支上工作
-
然后将成果合并到dev分支
-
合并分支时,使用普通合并,不要使用快进模式
- 命令 git merge --no-ff -m “合并生成新版本的名称” <被合并的分支名>
- 这种方式合并,就算分支被删除了,也能从历史中看到合并时的提交,就可以知道做过哪些合并
-
-
Bug分支
-
修复BUG时通常建立一个BUG分支
-
若手动工作还没忙完,可以先暂存一下
- 命令 git stash
-
BUG修复完后,再回到之前的工作现场
-
命令 git stash pop
- 这条命令会删除暂存区保存的工作现场
-
或 git stash apply
- 这条命令不会删除暂存区的工作现场
-
-
查看暂存的工作现场列表
- 命令 git stash list
-
删除暂存的工作现场
- 命令 git stash drop
-
合并已修复的bug到当前分支,避免重复工作
- 命令 git cherry-pick <已修复bug分支对应的提交点ID>
-
-
feature分支
-
开发新功能需要新建一个分支
-
如果要弃用并销毁,需要强行删除分支
- 丢弃一个没有合并过的分支时需要强制删除
- 命令 git branch -D <feature分支名>
-
-
多人协作
-
在本地创建和远程分支对应的分支,使用git checkout -b 分支名 origin/分支名,本地和远程分支的名称最好一致
-
推送自己的修改
- 命令 git push origin <分支名>
-
推送失败,说明远程分支比本地新,需要将远程的分支合并到本地
- 命令 git pull
-
如果有冲突,需要先解决冲突,并在本地提交
- 解决方法和本地的分支冲突一样
-
冲突解决后,再推送到远程库分支
- 命令 git push origin <分支名>
-
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <分支名> origin/<分支名>。
-
-
Rebase
-
多人在同一个分支上协作时,很容易出现冲突。即使没有冲突,后push的童鞋不得不先pull,在本地合并,然后才能push成功
- 这样就会出现很多分叉的提交
-
rebase操作可以把本地未push的分叉提交历史整理成直线
-
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
-
命令 git rebase
-
-
标签
-
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本
-
标签的方式更加便于找到需要的提交
-
创建标签
- 命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
- 命令git tag -a -m “blablabla…” commit id 可以指定标签信息;
- 命令git tag可以查看所有标签。
- 命令git show 可以看到说明文字:
-
标签管理
- 命令git push origin 可以推送一个本地标签;
- 命令git push origin --tags可以推送全部未推送过的本地标签;
- 命令git tag -d 可以删除一个本地标签;
- 命令git push origin :refs/tags/可以删除一个远程标签。
-
来源:CSDN
作者:AwακΣи゛
链接:https://blog.csdn.net/longba111888/article/details/103242458