git一些进阶的操作和坑

前言

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

错误提交commit

在这里插入图片描述

# 回退一次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 [email protected]:xxxx.git

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

# 网上的一些方案无法生成可用的SSH key
ssh-keygen -t rsa -b 4096 -C "[email protected]"

放到github中便可

git clone 相关

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

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

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

root@hecs-x-large-2-linux-20200730202807:~/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链即可恢复正常

删除本地未提交的更改

一直用desktop导致命令行很不熟练0 0

删除本地所有未提交的更改:

git checkout .

删除本地对file文件的更改

git checkout -- file

每次git pull都需要auth

如果我们git clone的下载代码的时候是连接的https://而不是git@git (ssh)的形式,当我们操作git pull/push到远程的时候,总是提示我们输入账号和密码才能操作成功,频繁的输入账号和密码会很麻烦。

解决办法:

git bash进入你的项目目录,输入:

git config --global credential.helper store

然后你会在你本地生成一个文本,上边记录你的账号和密码。当然这些你可以不用关心。

然后你使用上述的命令配置好之后,再操作一次git pull,然后它会提示你输入账号密码,这一次之后就不需要再次输入密码了。

gitignore失效问题

如果项目一开始没有添加gitignore,后面添加gitignore会失效,因为git已经将这些文件夹加入项目管理了。删除缓存即可

git rm -r --cached .  
git add .
git commit -m "update gitignore"

猜你喜欢

转载自blog.csdn.net/weixin_44602409/article/details/108048999
今日推荐