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

具体问题

修改之前的提交

  1. 查看之前的提交,获取节点hashcode

    $ git log --oneline
    
  2. 使用git rebase 修改以前已经提交的内容

    比如要修改之前的commit的 hashcode为:187f869c9d54c9297d6b0b1b4ff47d2ec781a55e

    退回到要修改的commit的前一个点上,执行后,git会调用默认的vi编辑器显示commit到最新commit的所有记录,

    $ git rebase 187f8^ --interactive
    $ git rebase 187f8^ -i
    

    将 187f8 之前的 pick 改为 edit,保存退出vim。

  3. 修改完我们要修改的内容后,利用git add 添加

    $ git add <filepattern>
    
  4. 修改这个commit

    $ git commit --amend
    
  5. 提交修改后的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^

posted @ 2023-03-22 14:08  少年と山  阅读(27)  评论(0)    收藏  举报