stash暂存

有时候在修改需求时,突然线上发现一个紧急的BUG,此时的需求还没有达到提交的程度,这就需要把修改暂存起来,以备下次使用。

git stash  // 将还没add的代码暂存起来
git stash list  // 显示暂存的列表
git stash save name  // 将stash以name为名称暂存
git stash -u  // 可以将未跟踪的文件暂存
# git stash是git stash push的缩写
# git stash push是可以暂存单个文件的
# 格式为git stash push <file1> <file2>
git stash push src/pages/login.vue

待修复完线上代码后,需要将暂存的恢复到工作区来,此时就要用到:

git stash apply stash{0}  // 0为stash list中的暂存项的下标,后存储的会在前面

恢复之后这个暂存记录是还存在的,可以选择丢弃掉:

git stash drop stash{0}  // 丢弃指定下标的stash

技巧

如果stash中只有一个可以使用git stash pop此时会将暂存恢复的工作区,并删除stash list中的第一个。

执行git stash命令的时候新建文件并不会暂存,需执行命令:

git stash save -a (name)  // 此命令同 git add . + git stash save (name)

log日志

git log输出所有commit日志。但有大多数情况提交记录很多,终端面板不够长,造成混乱。所以需要输出指定长度的日志。此时使用:

git log -(n)  // n为最近的n条日志

就可以输出固定条数的日志了。

git分支排序输出

git branch -v --sort=committerdate

git rebase合并commit

git rebase -i HEAD~3  // 从HEAD版本开始往后数3个版本

在git服务器上新建一个裸仓库

sudo git init --bare repositoryName.git
sudo chown -R git:git repositoryName.git  // 把owner改为git用户组(因为之前是使用git用户组搭建的服务)

修改最近一次commit信息

git commit --amend

git 修改历史提交的commit信息

git log -n  // 获取需要修改的commit的上一条commit_id
git rebase -i <commit_id>  // 找到需要修改的commit记录,将pick改为edit或者e,:wq退出
git commit --amend  // 修改commit记录
git rebase --continue  // 继续修改直至结束

// 中间可以跳过或者退出rebase模式
git rebase --skip
git rebase --abort

从某次commit切出分支

git checkout -b <branch_name> fd4f985e  // fd4f985e为某次提交的commit_id

修改分支名称

git branch -m oldname newname

删除git库中untracked file

git clean -f

将已经commit的恢复到commit之前的状态

git reset HEAD^  // 适用于临时需要切换到其它分支,替代git stash

commit已经push到远程时,也可以使用reset HEAD^,不过此时修改后需要:

git push origin -f  //强制覆盖远程(适用于其他人没有拉取被覆盖之前的代码时)

如果其他同事已经拉取了覆盖之前的代码,在git pull origin之后,本地会出现覆盖之前代码的commit和远程仓库的一个拉取记录,此时只需要:

git reset HEAD^  // 将commit改为修改状态
git checkout .  // 取消所有修改即可

将已经rebase成功的记录恢复到之前的状态

首先执行git reflog查看本地记录:

Snipaste_2020-10-20_09-27-41

发现本次rebase之前的ID24ba9af1,于是,执行:

git reset --hard 24ba9af1

就可以了。

查看分支是由哪个分支拉出来的

// 第一个方法
git reflog show <branch name>
// 第二个方法:这个方法可以查看分支切换的记录,最后一条显示的就是基于的分支,适用于分支切换记录不多的情况
git reflog --date=local | grep <branch name>

查看分支创建时间

git reflog --date=iso <branch name>

git切换远程分支

git remote set-url origin [remote url]

输出:

 本地分支

远程分支