Git笔记
git安装(windows10 & Ubuntu)
windows10:git-for-windows
#Ubuntu:
sudo apt-get install aptitude
sudo aptitude install git
git配置
- git config –global user.name “Yourname”
- git config –global user.email “Youremail@xxx.com”
- ssh-keygen -t rsa -C “Youremail@xxx.com” 生成公私钥
- setting → SSH and GPG keys → New SSH key 实现免密登录
git config的作用域及配置
git config --local 这里的配置只对某个仓库有用
git config --global 对当前用户的所有仓库都有用
git config --system 对系统所有登录用户都有效
###显示config的配置
git config --list --local
git config --list --global
git config --list --system
git和gitlab管理多对私公钥
ssh-keygen -t rsa -C "yxl@yxl" -f ~/.ssh/gitlab_id_rsa
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/gitlab_id_rsa
//上面两部出错的时候执行以下在执行以上两步
ssh-agent bash可以通过 ssh-add -D 来清空私钥列表
ssh-add -D可以通过 ssh-add -l 来确私钥列表
ssh-add -l
在 ~/.ssh 目录下新建一个config文件
touch config
# gitlab
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
# gitlab
Host gitlab.com
HostName gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab_id_rsa
ssh -T git@github.com
学习网址
git基础知识
4个位置
- 工作区
- 暂存区
- 本地仓库
- 远程仓库
5个状态
- 未修改(Original)
- 已修改,未add(未暂存)
- 已修改,已add(已暂存:git add)
- 已提交,未推送(git commit)
- 已推送 (git push)
git基本使用
git add -A 提交所有变化(包括删除了修改过的文件)
git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
git add <FileName> | . 将文件加入到暂存区
git commit -m "...." 将暂存区的文件添加到本地版本库
git commit - am "...." 等同于上面两步,前提是文件是tracked状态
git commit -m "commnet...."
git mv oldFileName newFileName git重命名
//提交一个文件之后想重新对这次提交进行撤销合并其他文件重提
//交让两次不同提交变成一次提交(首先要把第二份add一下)
git commit --amend
查看log
git log 查看本地版本库信息
git log -n2 查看最近两条 commit信息
git log --oneline 以一行显示commit信息
git log -n2 --oneline 上者合并
git log --author="yeqianxun" 按作者查看log
git log --graph 以图形方式显示
git log --decorate 会显示出tag信息.
git reflog 查看所有commit信息,用于回到未来
代码撤销
//丢掉工作区的修改
git checkout -- <fileName>
// 取消上次暂存区的缓存
git reset HEAD file <fileName>
// 不删除工作空间改动代码,撤销commit,不撤销git add .
git reset --soft HEAD
//不删除工作空间改动代码,撤销commit,并且撤销git add . 等价于git reset HEAD~1
git reset --mixed HEAD ~1
//删除工作空间改动代码,撤销commit,撤销git add .
git reset --hard HEAD ~1
代码状态临时保存
git stash 保留工作现场
git statsh apply + stashID 恢复到某个工作场景
git stash drop + stashID 删掉之前保留的工作场景
git stash pop 上述两条命令之和
分支管理
//丢弃一个没有被合并过的分支,可以强行删除。
git branch -D <name>
//普通的删除分支的方式
git branch -d <name>
//切换分支
git checkout <branch_name>
//把dev分支的工作成果合并到master分支上HEAD>>master
git branch -v | git branch -a 常看本地有多少分支
//在本地创建和远程分支对应的分支
git checkout -b <yourBranchName> commitID 基于commitID创建分支并切换分支
//建立本地分支和远程分支的关联
git branch --set-upstream-to=origin/<remoteBranch> <LocalBranchName>
代码合并
//将dev合并到当前分支,合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,
//而fast forward合并就看不出来曾经做过合并。merge他会保留每一次提交的历史
git merge dev
//把本地未push的分叉提交历史整理成直线,合并到当前分支;
git rebase
//将其他分支的部分代码合并到当前分支
git cherry-pick <commit_id>
远程仓库管理
git push <远程主机名> <本地分支名> <远程分支名>
//查看远程库的信息
git remote ->origin
git remote -v
//显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
//origin git@github.com:yeqianxun/learngit.git (fetch)
//origin git@github.com:yeqianxun/learngit.git (push)
//上面
//推送本地分支到远程
git push origin <LocalBranchName>
//要关联一个远程库
git remote add origin git@server-name:path/repo-name.git;
//关联后,第一次推送master分支的所有内容;
git push -u origin master
//每次本地提交后,只要有必要,就可以使用命令推送最新修改;
git push origin master
//同步服务器
git pull
标签管理
//打标签
git tag <TagName> 默认标签是打在最新提交的commit上
//将标签打在指定的commiID上.PS:标签不是按时间顺序列出,而是按字母排序的
git tag <TagName> <commitID>
//创建带有说明的标签
git tag -a <tagName> -m <comment>
//删除标签
git tag -d <tagName>
//推送标签到远程。创建的标签都只存储在本地,不会自动推送到远程
git push origin <tagname>
//一次性推送全部尚未推送到远程的本地标签
git push origin --tags
//删除远程标签
1. git tag -d <tagName> 删除本地标签
2.git push origin :refs/tags/<tagName>
git merge,git rebase的区别
- 提交记录的区别
merge 保持了修改内容的历史记录,但是历史记录会很复杂;而 rebase 后的历史记录简单,是在原有提交的基础上将差异内容反映进去 - 撤销合并的不同
如果使用 merge 进行合并,可以使用 revert 命令对 merge 的内容进行撤销操作,而使用 rebase 则不行,因为已经没有 merge commit 了
参考文章:
https://www.cnblogs.com/ludashi/p/8213550.html
git diff ,git format-patch的应用
format-patch 和diff 的区别:
- git diff生成的UNIX标准补丁.diff文件
- git format-patch生成的Git专用.patch 文件
创建patch文件
//commit_ID对应的前n次提交作对比生成patch文件
git format-patch <commit_ID> -n
//两个commitID之间的所有区别
git format-patch <commitID_1> <commitID_2>
创建diff文件
//将两个commitID之间的区别生成到指定的diff文件中
git diff <commitID_1> <commitID_2> <diff文件名>
检查patch/diff文件是否可以直接应用到项目中
git apply --check <path/to/xxx.patch>
git apply --check <path/to/xxx.diff>
应用patch
git apply <path/to/xxx.patch>
git apply <path/to/xxx.diff>
//自动合入 patch 中不冲突的代码改动,同时保留冲突的部分
git apply --reject <path/to/xxx.diff>
网友评论