流程
# 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 2362accf3e7be23e30 47f88153de2dc2f48a1 --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指向branch1)
$ 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 stash list
# 默认查看第一个stash做的改动 查看第二用`git stash show stash@{1}`
$ git stash show
# 默认查看第一个stash做的改动,具体显示内容
$ git stash show -p
# or `git stash apply stash@{$num}`应用某个存储,但不会从存储列表删除
$ git stash apply
# or `git stash pop stash@{$num}`应用存储并删除
$ git stash pop
# 丢弃某个存储,列表中删除
$ git stash drop stash@{$num}
# 删除所有缓存的stash
$ git stash clear
具体问题
修改之前的提交
git rebase 使用总结:
使用git rebase 修改以前已经提交的内容
比如要修改之前的commit的 hashcode为:187f869c9d54c9297d6b0b1b4ff47d2ec781a55e
- 退回到要修改的commit的前一个点上,执行后,git会调用默认的vi编辑器显示commit到最新commit的所有记录,把我们要修改的那一项的首行的pick 改成edit。
$ git rebase 187f869c9d54c9297d6b0b1b4ff47d2ec781a55e^ --interactive
$ git rebase 187f869c9d54c9297d6b0b1b4ff47d2ec781a55e^ -i
- 修改完我们要修改的内容后,利用git add 添加
$ git add <filepattern>
- 修改这个commit
$ git commit --amend
- 提交修改后的commit 并且返回到原来的head 处
$ 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
# 再提交就好了