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 “[email protected]”
- ssh-keygen -t rsa -C “[email protected]” 生成公私钥
- 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 [email protected]
学习网址
廖雪峰Git教程
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 | . 将文件加入到暂存区
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 --
// 取消上次暂存区的缓存
git reset HEAD file
// 不删除工作空间改动代码,撤销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 checkout . #本地所有修改的。没有的提交的,都返回到原来的状态
git stash #把所有没有提交的修改暂存到stash里面。可用git stash pop回复。
git reset --hard HASH #返回到某个节点,不保留修改。
git reset --soft HASH #返回到某个节点。保留修改
git clean -df #返回到某个节点
git clean 参数
-n 显示 将要 删除的 文件 和 目录
-f 删除 文件
git checkout . && git clean -xdf
代码状态临时保存
git stash 保留工作现场
git statsh apply + stashID 恢复到某个工作场景
git stash drop + stashID 删掉之前保留的工作场景
git stash pop 上述两条命令之和
分支管理
//丢弃一个没有被合并过的分支,可以强行删除。
git branch -D
//普通的删除分支的方式
git branch -d
//查看远程分支
git branch -r
//删除远程分支tmp。
git push origin --delete remote_branch
//切换分支
git checkout
//把dev分支的工作成果合并到master分支上HEAD>>master
git branch -v | git branch -a 常看本地有多少分支
//在本地创建和远程分支对应的分支
git checkout -b commitID 基于commitID创建分支并切换分支
//没有远程分支remote_branch,有本地分支local_branch,已经切换到本地分支
git push origin local_branch :remote_branch
//建立本地分支和远程分支的关联
git branch --set-upstream-to=origin/
代码合并
//将dev合并到当前分支,合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,
//而fast forward合并就看不出来曾经做过合并。merge他会保留每一次提交的历史
git merge dev
//把本地未push的分叉提交历史整理成直线,合并到当前分支;
git rebase
//将其他分支的部分代码合并到当前分支
git cherry-pick
远程仓库管理
git push <远程主机名> <本地分支名> <远程分支名>
//查看远程库的信息
git remote ->origin
git remote -v
//显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
//origin [email protected]:yeqianxun/learngit.git (fetch)
//origin [email protected]:yeqianxun/learngit.git (push)
//上面
//推送本地分支到远程
git push origin
//要关联一个远程库
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 默认标签是打在最新提交的commit上
//将标签打在指定的commiID上.PS:标签不是按时间顺序列出,而是按字母排序的
git tag
//创建带有说明的标签
git tag -a -m
//删除标签
git tag -d
//git show命令可以查看tag的详细信息,包括commit号等。
git show tagName
//推送标签到远程。创建的标签都只存储在本地,不会自动推送到远程
git push origin
//一次性推送全部尚未推送到远程的本地标签
git push origin --tags
//删除远程标签
1. git tag -d 删除本地标签
2.git push origin :refs/tags/
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 -n
//两个commitID之间的所有区别
git format-patch
创建diff文件
//将两个commitID之间的区别生成到指定的diff文件中
git diff
检查patch/diff文件是否可以直接应用到项目中
git apply --check
git apply --check
应用patch
git apply
git apply
//自动合入 patch 中不冲突的代码改动,同时保留冲突的部分
git apply --reject