git
流程
# 1. 克隆
$ git clone .....
# 2. 进入文件夹
$ cd xxx
# 3. 查看所有分支
$ git branch -a
# 4. 查看远程分支
$ git branch -r
# 5. 创建分支并追踪到远程分支
$ git checkout -b xxxxx origin/xxxx
# 6. 从远程分支拉取
$ git pull --rebase
# 7. 查看工作区与暂存区区别
$ git status
# 详细查看
$ git diff --cached git diff --staged
# 8. 将工作区修改添加到暂存区
$ git add .
# 9. 提交暂存区所有修改
$ git commit -a
# 10. vim
$ i // 进入编辑模式
$ esc // 退出到普通模式
$ : // 进入命令模式
$ wq // 命令模式下 保存并退出
# 11. 修改上一次提交
$ git commit --amend
$ shift+ZZ // vim下直接保存并退出
# 12. 推送到远程版本库
$ git push origin HEAD:refs/for/sandbox/master
指令
可以使用正则搜索文件名 *
# 将文件从工作区添加到暂存区
$ git add .
# 将暂存区内容提交到版本库
$ git commit -m 'first commit'
# 修补式提交
$ git commit --amend
# 将本地分支推送到远程分支
$ git push origin <local branch>:refs/for/<remote branch>
# 切换分支
$ git checkout branch
# 在other上创建新分支并切换过去
$ git checkout -b new_branch origin/other
# 撤销未暂存的修改
$ git checkout file_name
$ git checkout -- file_name // file_name与branch名字冲突时
# 还原文件到07ed节点
$ git checkout 07ed <filename>
# 撤销已暂存的修改
$ git reset file_name
# 撤销已暂存的修改,并覆盖工作区
$ git reset --hard HEAD
# 回滚到xxx状态
$ git reset --hard xxxx
# 恢复到未回滚前的状态
$ git reset --hard ORIG_HEAD
# 比较工作区和暂存区
$ git status
# 同时比较暂存区和工作区、版本区
$ git status -s
# - 工作区修改,暂存区为空: 比较工作区和版本库共同文件
# - 工作区修改,暂存区不为空:比较工作区与暂存区共同文件
$ git diff
# 比较工作区与版本库
$ git diff HEAD
# 比较暂存区与版本库
$ git diff --staged git diff --cached
# 比较两次提交 只显示文件名
$ git diff HEAD HEAD^ --name-only
# 查看日志,只显示标题
$ git log --oneline
# 显示分支,图像
$ git log --oneline --all --decorate --graph
# 查看某个文件的变更
$ git log <filename>
# 查看HEAD跳转历史
$ git reflog
# 在使用git reflog后,跳转到节点
$ git reset xxxx
# 在使用git reflog后,跳转到id所指状态
$ git reset --hard HEAD@{id}
# 从远程下载
$ git fetch
# 合并分支
$ git merge
# 应用其他提交(c0 c1 ...)到当前分支
$ git cherry-pick C0 C1...
# 将当前分支变基到branch1分支(HEAD指向当前分支)
$ git rebase branch1
# 将branch1分支变基到branch2分支(HEAD指向branch2)
$ git rebase branch1 branch2
# 交互式衍合以整理未入库的提交,包括修改、拆分、压缩、改变顺序、删除等
$ git rebase -i HEAD~N
# 以合并方式同步远程库
$ git pull
# 以衍合方式同步远程库
$ git pull --rebase
# 创建分支
$ git branch xxx
# 追踪远程分支
$ git branch -u origin/xxx
# 删除xxx分支
$ git branch -d xxx
# 强制删除xxx分支
$ git branch -D xxx
# 将three分支变为指向c2节点,改变分支指向还可以使用以下:
$ git branch -f three c2
$ git rebase one master // 其中master为one祖先节点,则将master移动到one处,并且HEAD指向master 先删除分支,再在指定节点创建分支
# 查看本地分支追踪
$ git branch -vv
# 修改分支名字
$ git branch -m oldName newName
# 和远程分支关联
$ git branch -u origin/Iterate
# 可以命名的stash
$ git stash push -m "my_stash"
# 查看存储了哪些
$ git stash list
# 默认查看第一个stash做的改动 查看第二用`git stash show stash@{1}`
$ git stash show
# 默认查看第一个stash做的改动,具体显示内容
$ git stash show -p
$ git stash apply stash@{$num} # 应用某个存储,但不会从存储列表删除
$ git stash apply
$ git stash pop stash@{$num} # 应用存储并删除
$ git stash pop
# 丢弃某个存储,列表中删除
$ git stash drop stash@{$num}
# 删除所有缓存的stash
$ git stash clear
# 清除Git仓库未托管的文件
# 删除 untracked files
git clean -f
# 连 untracked 的目录也一起删掉
git clean -fd
# 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd
# 在用上述 git clean 前,强烈建议先加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd
# 删除暂存区和版本库的文件,但保留了工作区的文件
git rm --cached
具体问题
修改之前的提交
-
查看之前的提交,获取节点hashcode
$ git log --oneline -
使用git rebase 修改以前已经提交的内容
比如要修改之前的commit的 hashcode为:
187f869c9d54c9297d6b0b1b4ff47d2ec781a55e退回到要修改的commit的前一个点上,执行后,git会调用默认的vi编辑器显示commit到最新commit的所有记录,
$ git rebase 187f8^ --interactive $ git rebase 187f8^ -i将 187f8 之前的
pick改为edit,保存退出vim。 -
修改完我们要修改的内容后,利用git add 添加
$ git add <filepattern> -
修改这个commit
$ git commit --amend -
提交修改后的commit 并且返回到原来的head 处
受到阻碍 查看是否有没有处理的修改 可以 git stash
$ git rebase --continue
删除误提交的文件
$ git rm --cached <filename>
# rm 'filename'
$ git status
# Untracked files: ... filename ...
$ git commit --amend --allow-empty
$ git log --stat
遇到错误
First, rewinding head to replay your work on top of it...
# 解决方法
$ git fetch origin
$ git reset --hard origin/slp/ac/smb/develop-mtk-mesh-210621
拉取代码后解决冲突
$ git add/rm <conflicted_files>
$ git rebase --continue
# 再提交就好了
两次stash合并
先pop第一个,然后commit,再pop一个,然后reset HEAD^
如果遇到这种情况 不如都commit ,rebase融合,再reset HEAD^

浙公网安备 33010602011771号