Git
个人笔记,学习自->廖雪锋的官方网站
大部分贴图来源同上
一、Git的使用
设置名字和邮箱
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
注意git config命令的 --global参数,使用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址
创建新文件夹
mkdir 文件夹名
移动
cd /路径
显示当前目录
pwd
初始化仓库
git init
将文件添加到仓库
git add 文件名.后缀
git add 文件夹名
提交注释/版本
git commit -m "注释"
可以一次提交多个文件
查看当前目录的文件
ls
dir
查看工作区当前状态
git status
查看difference
git diff 文件名.后缀
查看工作区和版本库里面最新版本的区别
git diff HEAD -- 文件名.后缀
查看提交历史
git log
git log命令显示从最近到最远的提交日志
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上pretty=oneline参数
git log --pretty=oneline
回退版本
git reset --hard Hard^ 或 git reset --hard HARD~1
回退到上2个版本
git reset --hard Hard^^ 或 git reset --hard HARD~2
前进到某个版本
git reset --hard 版本号
版本号从git log中获得,也可以使用git reflog查看
查看历史命令
git reflog
工作区&版本库&暂存区
暂存区stage - add后存放于暂存区
提交commit后
丢弃工作区的修改
$ git checkout -- 文件名.后缀
用版本库里的版本替换工作区的版本
把暂存区的修改撤销掉(unstage),重新放回工作区
git reset HEAD 文件名.后缀
删除文件
- rm 文件名.后缀 或 手动删除
从版本库中删除文件 - git rm 文件名.后缀
- git commit -m “删除注释”
ps:先手动删除文件,然后使用git rm 和 git add 的效果是一样的
命令git rm用于删除一个文件,如果一个文件以及被提交到版本库,那么你永远不要担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容
二、远程仓库
前言:
1. 创建SSH Keys
用记事本/notepad++打开id_rsa.pub文件,全选并复制里面的内容
2. 登陆GitHub,添加SSH Keys
创建远程库
关联远程库
git remote add origin git@github.com:Git的账户名/远程库名.git
如git remote add origin git@github.com:michaelliao/learngit.git
或
git remote add origin https://github.com/Git的账户名/远程库名.git
如git remote add origin https://github.com/Makonike/MyFirstGit.git
将本地库的所有内容推送到远程库上
git push -u origin 分支名(默认是master)
如git push -u origin Git1
git push origin master
SSH警告
从远程库克隆
git clone git@github.com:Git的账户名/远程库名.git
或
git clone https://github.com/Git的账户名/远程库名.git
三、分支管理
基础分支命令
创建新分支dev,切换至新分支
git checkout -b dev
相当于
git branch dev
git checkout dev
查看当前分支
git branch
git branch命令会列出所有分支,当前分支前面会标一个*号
切换分支回master
git checkout master
合并分支(当前分支在master)
git merge dev
删除分支
(必须先位于其他分支,现在位于master)
git branch -d dev
switch - 切换分支的新命令
创建并切换到新的分支
git switch -c dev
切换到已有分支master
git switch master
Git鼓励大量使用分支:
分支冲突
新建了一个分支feature1,经过一系列操作后
会产生合并冲突 - 文件存在冲突
可以用git merge feature1或git status查看
可以用带参数的git log 查看分支合并情况
git log --graph --pretty=oneline --abbrev-commit
最后删除分支feature1
git branch -d feature1
总结
分支管理策略
禁用快速合并方式
git merge --no-ff -m "merge with no-ff" dev
可以查看历史记录
Bug分支
工作进行到一半还没提交,需要新建分支修复bug的时候
储藏工作区
git stash
可以用git status查看工作区状态 是干净的
若bug在master上,创建临时分支issue-101
完成修改后,切换回master分支并合并issue-101,删除issue-101
回到工作分支dev
查看储藏的工作区
git stash list
然后恢复工作区
git stash apply
git stash drop
等价于
git stash pop
可以多次stash,然后恢复指定的stash
git stash apply stash@{0}
因为dev分支是从master上分离出来的,因此dev上也有相同的bug需要被修改
有两个选择:
- 可以重复操作一次
- 直接从master合并修改bug的那一小部分到dev
复制特定提交到当前分支
git cherry-pick 版本号
git cherry-pick 版本号
分支合并
软件开发中,总有无穷无尽的新的功能要不断添加进来。
每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
如下
git switch -c feature-vulcan
....
git add vlucan.py
git commit -m "add feature vulcan"
准备合并
这时却被通知需要销毁
删除分支
git branch -d feature-vulcan
-提示:销毁失败,该分支还未合并,如果删除则会丢失修改
那就强行删除
git branch -D feature-vulcan
-删除成功
多人协作
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了
远程库库名默认为git
查看远程库信息
git remote
或
git remote -v
推送分支
git push origin master
抓取分支
小伙伴在自己的电脑(把SSH Key添加到Github)
从远程库克隆
…
只能看到本地的master分支
如果想在dev分支上开发创建远程origin的dev到本地
需要创建本地dev分支
git checkout -b dev origin/dev
提交冲突:
先抓分支,在本地合并,然后再推送
git pull
要先指定本地分支和远程分支的链接
设置链接
git branch --set-upstream-to=origin/dev dev
再
git pull
多人协作小结
Rebase - 整理分支提交历史
把本地未push的分支提交历史整理成直线
在与远程分支同步后,对于hello.py做两次提交
尝试推送
git push origin master
-推送失败
先pull一下
git pull
查看状态
git status
-较远程分支提前3个提交
用git log查看
git log
发现有点乱
这时可以使用rebase
git rebase
再用git log查看
分叉的提交已经成直线型了
推送到远程
git push origin master
查看效果
git log
远程分支的提交历史也是一条直线。
补充(以下图源git rebase 大法好)
git rebase前
git rebase后
尽量在本地自己的分支rebase,避免在公共分支使用
因为会修改提交历史,存在隐患
四、标签管理
前言:
标签是版本库的一个快照
-指向某个commit的指针
创建标签
先切换到要打标签的分支上
默认打在最新提交的commit上
git tag v1.0
精确打标签到某个版本
git tag v0.9 版本号
查看所有标签(按字母顺序)
git tag
查看标签信息
git show v0.9
还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
git tag -a v0.1 -m "version 0.1 released" 1094adb
使用 git show 标签名 命令可以查看到标签说明文字
删除标签
git tag -d v0.1
推送某个标签到远程
git push origin v1.0
推送全部标签到远程
git push origin --tags
如果标签已经推送到远程,要删除
先删除本地标签
git tag -d v1.0
再删除远程标签
git push origin :refs/tags/v1.0
git push origin :refs/tags/v1.0
五、使用GitHub