git细节

257 阅读2分钟
1、abort导致commit丢失之后,可以通过
git reflog

找到最近的commit号,然后可以cherry-pick回来

2、创建远程分支

以创建分支dev/948为例
第一步,创建本地分支

git checkout -b dev/948

第二步,推送到远程

git push origin dev/948

第三部,关联本地和远程

git branch --set-upstream-to=origin/dev/948

done

3、重置本地分支
  • 如果本地有文件变动,但是没有未push的commit
    直接执行下边的命令即可,这是个危险的操作,如果你确定要丢弃所有变动在执行
git reset --hard
  • 如果有未push的commit,那就需要拿到最新的远程最后一次commit id,之后
git reset --hard commitId

这样就可以了。
这是个危险的操作,如果你确定要丢弃所有变动在执行

4、删除本地有但在远程库已经不存在的分支
git remote prune origin

完成之后可以通过

git remote show origin

查看状态

5、git checkout 拉取远程分支
git checkout -b dev(本地分支名) origin/dev(远程分支名)

6、revert merge引起代码丢失

问题复现: 现在有两个分支:master和dev
master是发版用的主分支,dev是分配完任务自己用的开发分支。
dev接近完成之后,merge master。这个时候的master携带了其他dev分支的代码。
merge完成之后(已经push了本次merge)发现工程文件有问题,项目跑不出来。
然后revert本次merge。
这个时候如果将来master合并了dev分支,revert掉的代码也会消失,因为那次commit的时间线为revert的时间。

光在这说可能不太好理解。具体的例子会有有时间写一个图文并茂的。

下边说下我们的解决方案:挨个cherry-pick回来。

再说一个网上的解决方案:revert之前的 revert,这个方法肯定是可以,但是不适合人多的开发,因为发现问题的时候已经过去了一段时间,会造成很多混乱。

问题核心: 如果日常pull加上 --rebase会造成时间线的修改,叠加revert的时间线修改会造成代码被冲掉的问题。所以,合并代码一定要解决好所有问题再去push,不要为了省时间,先push,再解决问题。这是一个技术问题,更是一个流程问题。