验证中...
Languages: Logos
Categories: 数据库相关
Latest update 2019-03-18 13:00
Snippet 1 Snippet 2
gistfile1.txt
Raw Copy
- [commit 规范](commit.md)
- 工作区 暂存区 分支/仓库
- 文件一开始在工作区, add 后在暂存区, commit 后在分支或仓库, push 后在远程分支或仓库
- 文件名区分大小写
- origin 一般指远程库的名字
- master 一般指主分支
- origin master 远程库的主分支
- push 时会把本地的几次commit 一起合并到远程库
- HEAD: 已经提交的commit的最新版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本
- HEAD~100 往上第100个版本
# 常用命令
- git init 初始化git仓库
- git add <file> 把要commit的文件, 放到暂存区. (如果 add 的文件没有修改过, 则不起作用)
- git add . 把所有文件都进行 add
- git rm <file> 删除暂存区版本库中的某个文件, 同样需要commit
- git commit -m "description" 提交暂存区内容到分支
- git commit -a -m "description" 提交工作区自上次commit之后的变化
- git commit --amend 修改上次提交(修改 -> add -> commit -> 发现上次提交少了东西或改少了东西 -> 重新作出修改 -> add -> commit --amend -> 这时当前commit会和上次commit合并成一个)
- git status 显示当前状态: 文件被修改,但未commit; 已经add过的文件列表. commit后返回"干净"
- git diff 查看修改的内容对比
- git log 查看提交记录
- git push 推送提交的内容到远程仓库 (应该是等同于 git push origin master )
- git push origin 推送当前分支到叫做origin的远程仓库里的对应分支
- git push origin master 把master分支推送到叫origin的远程库里 (如果当前是A分支, push 到远程的B分支 会报错, 只能push到对应分支)
- git rm --cached <file> 使git停止追踪指定文件
# 撤销 / 恢复
- git checkout -- <file> 回到最近一次git commit或git add时的状态(!!!文件所做的修改会被还原)
- 回到最近一次 git commit
0. A.txt 最开始的样子
1. 修改A.txt
2. git checkout -- A.txt
3. 恢复到 0
- 回到最近一次 git add
0. A.txt 最开始的样子
1. 修改A.txt
2. git add A.txt
3. 再次修改A.txt
4. git checkout -- A.txt
5. 恢复到 3
- git reset HEAD <file> 撤销暂存区的内容. 文件所做的修改不会被还原, 只是 git add 的反向操作(HEAD 表示当前已经提交的最新版本)
- git reset --soft HEAD~1
回退一个版本,不清空暂存区,将已提交的内容恢复到暂存区,不影响原来本地的文件(未提交的也不受影响)
只撤销 commit, 工作区暂存区代码不变, 被撤销的commit中的相关修改回退到暂存区
- 同一个文件: commit > 修改 > reset > 会出现工作区和暂存区两个版本, 工作区的不变, commit前的版本在暂存区
- git reset (--mixed) HEAD~1
回退一个版本,且会将暂存区的内容和本地已提交的内容全部恢复到未暂存的状态,不影响原来本地文件
撤销了 commit , 暂存区的内容变成未暂存
--mixed 是默认参数, 加不加都一样
- git reset --hard HEAD~1 (!!!其他两个不会导致当前的代码消失, 这个会)
撤销 commit, 清空暂存区, 本地文件恢复到之前的版本
[即使用了 --hard 也依旧可以还原](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000)
- git revert HEAD
提交一个新的commit, 文件被恢复到之前的状态, 需要填写撤销的信息(原因)
# stash 储藏
- git stash 暂存未提交的文件
- git stash save "xxx" 暂存未提交的文件(注释)
- git stash list 列出所有的暂存 ("stash@{0}" 是某一暂存的名字)
- git stash apply <name> 应用暂存 (如果不提供名字, 则默认是最近的一次暂存) (应用后并不会删除该暂存)
- git stash drop <name> 删除暂存 (如果不提供名字, 则默认是最近的一次暂存)
- git stash clear 清空所有
- git stash pop 应用最近一次暂存, 并删除掉
############
git rm --cached -f
# 远程库
- git remote add origin git@server-name:path/repo-name.git 本地库关联远程库 (origin 是这个远程库的默认名字, 只记录在当前电脑, 可理解为对这个远程库的别名)
- git push -u origin master 第一次推送时使用, 合并本地库与远程库并推送
- git push --all origin master 推送本地所有分支到远程库
- git fetch origin master
- git pull = git fetch + git merge
- git pull origin master 下载远程库上的文件与本地文件合并 (这里可以试下加上 --rebase, 作用: 取消当前分支的commit并暂存起来 > 与远程分支合并 > 将被取消的commit, 再次提交)
- git remote 查看本地库里记录的远程库地址 (加上 -v 输出更详细的记录)
# 分支
- git branch <name> 创建分支
- git checkout <name> 切换分支
- git checkout - 切换到上一个分支(执行一次, 从A切换到B, 再执行, 从B切换到A)
- git checkout -b <name> 创建后并切换分支
- git branch -d <name> 删除分支 (当要删除的分支未融合到其他分支时, 会提示无法删除)
创建并切换新分支 -> 修改内容 -> add + commit -> 切换到其他分支 -> 删除新分支 -> 报错(因为有提交未合并)
- git branch -D <name> 强制删除分支
- git push origin :<name> 删除远程库的分支, 冒号表示删除
- git branch 列出本地所有分支,当前分支前面会标一个\*号
- git branch -a 列出所有分支, 包括远程库的分支
- git branch -m <old-branch-name> <new-branch-name> 分支重命名
- git branch --set-upstream-to=origin/<branch-name> 关联本地当前分支到远程的指定分支
- git push --set-upstream origin master 设置当前分支所对应的远程库分支, 使用后, 就可以使用 git push 而不用 git push origin master
# diff
- git diff --stat <branch-name-1> <branch-name-2>
显示出所有有差异的文件列表
- git diff <branch-name-1> <branch-name-2> <filename>
显示指定文件的详细差异
- git diff <branch-name-1> <branch-name-2>
显示出所有有差异的文件的详细差异
# 合并 merge
- git merge <branch-name>
把<branch-name>分支所做的修改合并到当前所在的分支
提交历史出现分叉
会自动判断是否使用Fast forward模式
非Fast forward模式合并完成后会在当前分支提交一个新commit表示合并过某某分支
- 如果合并冲突, 修改冲突的文件后
- git merge <branch-name-1> <branch-name-2> 把分支2所做的修改合并到分支1(不确定)
- git merge –-squash <branch-name>
合并完需要重新commit一次, 表示这里合并了分支, <branch-name>里的commit都会消失
将<branch-name>分支里的文件修改合并到当前分支, 但commit不合并过来, 需要再提交一次commit来总结
- git merge --no-ff <branch-name>
禁用Fast forward模式
会在合并完成后会在当前分支提交一个新commit表示合并过某某分支
TODO
- Fast forward模式
如果删除另一个分支, commit信息丢失?
git log看不到其他分支的信息, 看不出来曾经做过合并
- 非Fast forward模式
可以从git log看到其他分支的信息, 能看出来曾经做过合并
# cherry-pick
- 在A分支合并B分支的某个commit所做的修改
- git cherry-pick <commit-id>, <commit-id2> ...
- 将某个分支的某个(某些)commit, 单独合并到当前分支
# rebase
- git rebase <branch-name>
取消当前分支的commit并暂存起来 > 与<branch-name>分支合并 > 将被取消的commit, 再次提交(新旧两个commit的commit-id不同)
即使原本当前分支与目标分支的提交历史就交叉(A分支commit > B分支commit > A分支commit > B分支commit), rebase完成后最新的几个commit都是当前分支被取消的那几个分支
- rebase出现冲突, 解决冲突后需要add 和 git rebase --continue. 不需要commit
- 回到rebase前的状态: git rebase --abort
- git rebase --interactive <older-commit-id> <latest-commit-id>
* older-commit-id 的commit是不能操作的, 所以选择前一个commit的id. A -> B -> C -> D, 如果要合并C和D, 应选择B的commit-id为older-commit-id参数
* interactive表示交互式, 缩写 -i
* endpoint不填, 默认最新的一次提交
* pick:保留该commit(缩写:p)
* reword:保留该commit,但我需要修改该commit的注释(缩写:r)
* edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
* squash:将该commit和前一个commit合并(缩写:s)
* fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
* exec:执行shell命令(缩写:x)
* drop:我要丢弃该commit(缩写:d)
* [](https://www.cnblogs.com/hujunzheng/p/9732936.html)
* [](https://www.jianshu.com/p/cca69cb695a6)
- 在Jb系列IDE中, rebase的操作界面, 旧的commit排第一行, 新的commit排最后一行
"fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息" 这里的前一个指的是在该commit之前提交的commit(前一个的提交时间早于当前commit)
# 比较分支
- git log <b1> ^<b2>
b1 分支中有的, b2分支没有的(b1, b2 参数顺序可调换)
- git log <b1>..<b2>
b2 分支中比b1多提交的那些commit
- git log <b1>...<b2>
- git log --left-right <b1>...<b2>
对比两个分支所有不同的commit
"commit <" 表示左边分支有的, 右边没有的commit
"commit >" 表示右边分支有的, 左边没有的commit
# 本地代码上传到后来建立的远程库
1. git init 初始化本地库
1. git add .
2. git commit -m ''
3. ...之类的本地操作
2. git remote add origin url 关联远程库
3. git pull origin master --rebase 把下载远程库文件与本地合并
4. git push origin master 成功push到远程库
# 其他配置
## 命令别名
- git config {--global} alias.{别名} {要取别名的命令} // 加上global, 全局有效
- git config --global alias.st status
- git config --global alias.co checkout
- git config --global alias.ci commit
- git config --global alias.br branch
- git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
git.png

Comment list( 0 )

You need to Sign in for post a comment

Help Search