欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

git一些进阶的操作和坑

程序员文章站 2024-03-22 09:44:58
...

前言

开个坑,记录一下git一些使用场景和对应操作

错误提交commit

git一些进阶的操作和坑

# 回退一次commit
git reset --hard HEAD^
# 回退到某次commit
git reset --hard <commit_id>

如果使用git revert,会留下两条记录。
特别是不小心将master合并到current branch时候,如果用revert来撤销修改,那么接下来的PR会产生非常多的conflict

接着将本地reset完的结果push上去

git push --force origin <branch_name>

初始化

这个过程不算进阶,只不过我平时一直用github desktop操作,十分不熟悉罢了。

git init
git remote add origin aaa@qq.com:xxxx.git

出于安全考虑,Github 服务器和我们本地的通讯要求使用 SSH Key 来验证

# 网上的一些方案无法生成可用的SSH key
ssh-****** -t rsa -b 4096 -C "aaa@qq.com"

放到github中便可

git clone 相关

使用github的镜像网站进行访问,github.com.cnpmjs.org,我们将原本的网站中的github.com 进行替换。

git clone https://github.com.cnpmjs.org/graykode/gray.git

之后会得到项目文件夹,进去后.git内就包含了远程仓库项目的所有信息

aaa@qq.com:~/code/iLife/iLife# git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/auth
  remotes/origin/back-end-baiduai
  remotes/origin/back-end-bili

注意:使用这个方法后,push,fetch可能需要多次才能成功

error:src refspec master does not match any

引起该错误的原因是,目录中没有文件,空目录是不能提交上去的,而且在push之前至少有过一次commit才能提交

HEAD detached at origin/master

这是由于当切换到远端master时候

git checkout origin/master

提示如下内容

$ git status
HEAD detached at origin/master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        iLife/

nothing added to commit but untracked files present (use "git add" to track)

说明现在是一个匿名分支状态
正常情况下,HEAD指向一个branch,而branch又指向一个commit。
detached HEAD state指的是HEAD指针没有指向任何的branch,而是指向了一个commit
因为HEAD不能指向远程分支,它只能指向本地的某个commit或者本地分支。当"git checkout 远程分支",而本地又没有这个分支,HEAD就会直接指向远程分支指向的commit了,HEAD指向commit就会进入detached HEAD state。
于是:

git checkout -b 分支名 

让一个branch指向这个commit链即可恢复正常

相关标签: git