# Git和GitHub
Simplicity and power in a beautiful Git GUI A free Git client for Windows and Mac
摘要
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。它同时也是个内容管理系统(CMS)和工作管理系统等。
Github是一个基于git的代码托管平台。github 可以作为git的远程仓库。Github 由Chris Wanstrath, PJ Hyett 与Tom Preston-Werner三位开发者在2008年4月创办。
Git
下载与安装
在使用Git前需先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。
Git 各平台安装包下载地址为:http://git-scm.com/downloads
主要搞清几个基本概念和Git基本操作。
Git 基本概念:工作区、暂存区和版本库、远程仓库
Git 常用的有 6 个命令:git clone、git push、git add 、git commit、git checkout、git pull。
配置Git
本地创建ssh key:
ssh-keygen -t rsa -C "your_email@emailserver.com"
ssh -T git@github.com
git config --global user.name "your name"
git config --global user.email "your_email@emailserver.com"
实用场景
git修改文件夹名字
git mv -f oldfolder newfolder
git add -u newfolder (-u选项会更新已经追踪的文件和文件夹)
git commit -m "rename folder oldname to newname"
Git撤销本地commit
git reset HEAD~
HEAD 代表:上一次提交
Git如何永久删除文件(包括历史记录)
有些时候不小心上传了一些敏感文件(例如密码), 或者不想上传的文件(没及时或忘了加到.gitignore里的),
- 步骤一: 从你的资料库中清除文件
里头的命令是单引号,要记得换成双引号,不然会有 fatal: bad revision 'rm’报错。
$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch path-to-your-remove-file' --prune-empty --tag-name-filter cat -- --all
其中, path-to-your-remove-file 就是你要删除的文件的相对路径(相对于git仓库的跟目录), 替换成你要删除的文件即可. 注意一点,这里的文件或文件夹,都不能以 '/' 开头,否则文件或文件夹会被认为是从 git 的安装目录开始。
如:
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch Docs/附件:XXX〔2018〕134号.pdf" --prune-empty --tag-name-filter cat -- --all
如果你看到类似下面这样的, 就说明删除成功了:
Rewrite 8d4b10dab7389aaf2b821cc9bfac3cc827faa343 (1/7)
Ref 'refs/heads/main' was rewritten
Ref 'refs/remotes/origin/main' was rewritten
- 步骤二: 推送我们修改后的repo
以强制覆盖的方式推送你的repo, 命令如下:
$ git push origin master --force --all
为了能从打了 tag 的版本中也删除你所指定的文件或文件夹,您可以使用这样的命令来强制推送您的 Git tags:
$ git push origin master --force --tags
- 步骤三: 清理和回收空间
虽然上面我们已经删除了文件, 但是我们的repo里面仍然保留了这些objects, 等待垃圾回收(GC), 所以我们要用命令彻底清除它, 并收回空间.
命令如下:
$ rm -rf .git/refs/original/
$ git reflog expire --expire=now --all
$ git gc --prune=now
$ git gc --aggressive --prune=now
再看看你的.git目录文件大小变小了.
常用命令集锦
新建项目仓库及代码提交命令集:
mkdir myprj
cd myprj
git init
git clone username@host:/path/to/repository
git remote add origin git@github.com:yourName/youRepo.git
git remote -v
git remote rm [远程仓库别名]
git checkout master
git add .
git commit -am "code submit message"
git push origin master
git pull
git merge
git merge <对应的分支> --allow-unrelated-histories
git tag 1.0.0 1k2c3b69ef
git log
git status
git status -s
git config
git config --global -l
git config --local -l
git diff
注:Github上面近来把master默认改为main了,你可以修改设置。
Git学习教程
网上一搜可以教程一大把。随意选用,以下来自RUNOOB.COM的是一个比较完成的Git教程。
参考:
Github
何以言之
建议注册一个GitHub帐号。
Github学习教程
来自RUNOOB.COM的 Github 简明教程
入门极简单:git - 简明指南: 助你入门 git 的简明指南,木有高深内容 ;)