Git通过命令行上传文件的基本操作和常见错误解决
Git是一个很好的项目代码存放库。最近我正在初步了解Git,以下是我在通过Git Bash(命令行)进行文件上传遇到的系列问题,同时做好学习笔记以方便自己的学习,希望对你们也有帮助。好的习惯造就好的人生。

1. Git简介
Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper 。

2. User的配置(用户绑定)
2.1 文件配置
首先进入C:\Users\Administrator\ .gitconfig目录文件下,配置对应的user.name和user.email,并设置永久保存密码。
代码如下:
[credential] helper = store

2.2 命令行配置
在git.bash中输入:
git config --global user.name "Your Name" # 配置user.name git config --global user.email "your_email@example.com" # 配置user.email git config --global credential.helper store # 永久保存密码
3. SSH Key的生成
在git.bash中输入:
ssh-keygen -t rsa -C "your_email@example.com" # 生成SSH Key
如果已经有SSH Key,进入 ~/.ssh目录中用ls命令查询是否有id_rsa和id_rsa.pub两个文件,第一个文件为私钥,第二个文件为公钥。

4. 建立本地仓库
先进入项目目录下,输入:
git init # 把这个目录变成git可以管理的仓库
建立本地仓库成功后,初始化成功后项目里会多了一个隐藏文件夹.git。如果已经建立,会提示重新初始化并退出git仓库。

如何查找文件夹中隐藏的文件夹git:
点击页面上方菜单栏查看一项,选中隐藏的项目打勾,就可以显示隐藏的git文件。

5. 命令行文件上传
在git.bash中输入:
git add 文件名 # 将该文件添加到暂存区 git commit -m "commit" # 将暂存区内容添加到本地仓库中,双引号内是提交注释 git remote add origin 仓库地址 # 添加远程仓库,origin为远程仓库的别名,到github仓库中复制仓库地址,可以用https或者ssh git push -u origin master # 将本地的分支版本上传到远程并合并,上传本地代码

1. 如何解决文件上传时报错warning:adding embedded git repository:项目名:
即在本地初始化的仓库(使用 git init的文件夹) 中的某一个文件夹,也含有.git文件。
首页需要删除子文件夹里的.git文件;
然后重新add、commit、push。
2. 如何解决文件上传时提示fatal:remote origin already exists.:
在git.bash中输入:
git remote -v # 查看远程仓库信息 git remote rm origin # 删除关联的origin的远程仓库 git remote add origin 仓库地址 # 到github仓库中复制仓库地址,可以用https或者ssh
6. 删除已上传文件
在git.bash中输入:
git pull origin master # 将远程仓库里面的项目拉下来 dir # 查看有哪些文件夹 git rm -r --cached 文件名 # 删除该文件 git commit -m "删除文件" # 提交,添加操作说明 git push -u origin master # 将本次更改更新到github项目上去

7. 删除git历史提交记录
方法一:
git log # 查看git提交记录 git reset --hard commit的hash值 # 找到需要回滚到的提交点,复制它的hash值 git push origin HEAD --force # 将当前指向的head推到git

方法二:
git log # 查看git提交记录 git rebase -i commit的hash值前5位 # hash值为记录ID标识,会进入vi编辑页面,用j,k键进行上移和下移,用cw组合键命令将首行的pick替换为drop,然后按下ESC键退出vi的编辑模式,然后进入末行模式输入wq!保存并退出。 git log #查看git提交记录,是否确保已经删除。

8. 清空git所有提交记录
在git.bash中输入:
git checkout --orphan latest_branch # 切换到新的分支 git add -A # 缓存所有文件(除了.gitignore中声明排除的) git commit -am "commit" # 提交跟踪过的文件(Commit the changes) git branch -D master # 删除master分支(Delete the branch) git branch -m master # 重命名当前分支为master(Rename the current branch to master) git push -f origin master # 提交到远程master分支(Finally, force update your repository)
注:git commit -m用于提交暂存区的文件;git commit -am用于提交跟踪过的文件。
9. 移除敏感数据
如果将敏感数据(例如密码或 SSH 密钥)提交到 Git 仓库,可以将其从历史记录中删除。 要从仓库的历史记录中彻底删除不需要的文件,可以用git filter-branch命令和BFG Repo-Cleaner工具。
9.1 使用BFG
下载jar包
去官网下载BFG Repo-Cleaner的客户端(jar包)。将下载好的jar放到下载好的git库的同级目录。
使用mirror克隆新的仓库
git clone --mirror git@github.com:username(用户名)/my-repository.git(仓库名) # 到github仓库中复制仓库地址,--mirror后为仓库地址,可以用https或者ssh
注:在启动客户端时,报错warning:is not a invalid repository(不是一个有效的库),就按上面的方式重新clone。
删除不需要的文件
java -jar bfg.jar --delete-files id_{dsa,rsa} my-repository.git # 删除仓库里所有的名为'id_dsa'或'id_rsa'的文件
java -jar bfg.jar --strip-blobs-bigger-than 100M my-repository.git # 删除仓库里所有大于100M的文件
java -jar bfg.jar --delete-folders doc my-repository.git # 删除仓库里文件夹下所有的文件
git reflog expire --expire=now --all && git gc --prune=now --aggressive # 使用gc去除git认为多余的数据(上面调用命令删除的文件)
git push # 将代码提交到远程仓库
9.2 使用filter-branch
克隆
在git.bash中输入:
git clone https://github.com/用户名username/远程仓库名 # 从github克隆一个远程仓库到本地计算机

移除数据
在git.bash中输入:
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch 文件路径" --prune-empty --tag-name-filter cat -- --all # git也支持删除文件夹的方式,只需在rm后添加'-r'

防止再次提交
在git.bash中输入:
echo "文件路径" >> .gitignore # 创建.gitignore文件后面追加“文件路径”这个内容 git add .gitignore git commit -m "Add 文件路径 to .gitignore" # 提交,添加操作说明

提交git仓库
在git.bash中输入:
git push origin --force --all # 强制推送本地更改以覆盖github存储库,以及推送的所有分支

提交git tags
在git.bash中输入:
git push origin --force --tags # 需要提交git tags,用以更新服务器的git tags

删除本地缓存
在git.bash中输入:
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin # 执行git的gc操作清理本地缓存 git reflog expire --expire=now --all git gc --prune=now

查看文件夹大小
在git.bash中输入:
du -hs # 完成上述所有操作后,再使用命令du -hs查看文件夹大小,发现项目只有100k左右。此时即完成移除敏感数据的相关操作。

10. SVN和Git的区别
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
工作原理:工作时用的都是自己的电脑,所以首先要从中央服务器获得最新的版本,完成工作后需要把自己做完的任务推送到中央服务器。
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网,因为版本都在自己电脑上。
工作原理:A在电脑上改了某文件,B也在电脑上改了某文件,这时,A和B之间只需把各自的修改的内容推送给对方,双方就可以互相看到修改的内容。

以上内容是关于git的user配置,SSH Key的生成,本地仓库的建立,文件的上传和删除以及log的删除和清空,BFG,filter-branch的系列操作。
到此这篇关于Git通过命令行上传文件的基本操作和常见错误解决的文章就介绍到这了,更多相关Git命令行上传文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
VsCode中ctrl+s后会在当前目录下自动生成dist目录的方法
这篇文章主要介绍了VsCode中ctrl+s后会在当前目录下自动生成dist目录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-09-09
关于VSCode 装好ESLint 插件 import 报黄线的问题
这篇文章主要介绍了VSCode 装好ESLint 插件 import 报黄线的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-11-11
VScode 隐藏大量无用的文件比如在看Linux kernel或boot时候
这篇文章主要介绍了VScode 隐藏大量无用的文件比如在看Linux kernel或boot时候,VScode 工程创建先在 Ubuntu 下编译一下 uboot,然后将编译后的 uboot 文件夹复制到 windows 下,并创建VScode 工程,需要的朋友可以参考下2022-10-10


最新评论