#
```shell
#ubuntu:
sudo apt-get install git
```
### winodws
https://git-scm.com/downloads
设置用户名和邮箱:
```bash
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
#global表示本机上所有git仓库都使用这个配置
```
查看用户名和邮箱:
```bash
git config user.name
git config user.email
```
## 创建仓库**repository**
创建目录并进入,使用git init转换为git仓库
windows下目录名最好不要带中文
```bash
$ pwd
/d/firstgit
$ git init
Initialized empty Git repository in D:/firstgit/.git/
$ ls
$ ls -ah
./ ../ .git/
```
.git目录用于跟踪管理版本库
将创建的文本文件放入此目录
```bash
#添加到仓库
git add readme.txt
```
git无法跟踪图片/视频等二进制文件的具体变化
提交文件到仓库:
```bash
$ git commit -m "xxx" #本次提交的说明
[master (root-commit) d30cd93] xxx
1 file changed, 1 insertion(+)#一个文件被改动,插入一行内容
create mode 100644 readme.txt
```
commit一次可以提交多个文件,add也可以批量添加文件
## 修改
使用**git status**查看仓库状态
```bash
$ git status
On branch master
nothing to commit, working tree clean
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
```
已被修改但还未提交
**git diff**查看具体修改:
```bash
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 4486c34..5acf951 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
gitbash
+gitbash2
$ git add readme.txt
$ git commit -m "modified"
[master 70e6db6] modified
1 file changed, 1 insertion(+)
```
### 版本控制
从commit恢复
**git log**查看历史记录:
会给出用户名,邮箱,修改时间,提交的说明
当前版本:`HEAD`,上个:`HEAD^`,上上个:`HEAD^^`依次类推
往前10个版本:`HEAD~10`
版本回退:
```bash
$ git reset --hard HEAD^
HEAD is now at 70e6db6 modified
```
git log后可以看到最新的版本记录已经没了(其实是指针指向变化了)
要想恢复回来就要知道版本的commit id(使用git reflog)
```bash
$ git reflog
70e6db6 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
3185d16 HEAD@{1}: commit: modifiled again
70e6db6 (HEAD -> master) HEAD@{2}: commit: modified
d30cd93 HEAD@{3}: commit (initial): xxx
$ git reset --hard 3185d16
```
工作区就是电脑目录,版本库为.git目录(一般默认隐藏)
版本库中有暂存区stage和自动创建的分支master
git add是将文件修改添加到暂存区,git commit是将暂存区的所有内容提交到当前分支,全部提交后暂存区为空
git追踪的是修改,每次修改不用git add则不会加入commit中
### 撤销修改和删除
```bash
$ git checkout -- filename#丢弃工作区的修改
```
(1)修改后未add,则回到和版本库一样的状态
(2)修改后add但没有commit,则回到add后的状态
撤销add到暂存区的修改:
```bash
$ git reset HEAD readme.txt
```
再丢弃工作区修改
如果已经commit:回退版本(前提是还没提交远程仓库)
### 删除文件:
`git status`会告知哪些文件被删除了,若要从版本库中删除则`git rm <filename>`,并`git commit`
如果误删则撤销:`git checkout -- <filename>`,前提是已经提交到了版本库
## 远程仓库 github
本地仓库和github仓库传输通过ssh加密
创建ssh key:
```bash
ssh-keygen -t rsa -C "[email protected]"
```
在用户主目录创建了.ssh文件夹,且里面有id_rsa(私钥),id_rsa.pub(公钥)
然后打开github,进入Account settings的ssh keys页面,Add SSH Key,粘贴id_rsa.pub内容,点击Add Key
将本地库与远程库关联:
```bash
$ git remote add origin [email protected]:yourname/firstgit.git
```
远程库默认叫origin
推送:
```bash
$ git push -u origin master
```
```bash
查看远程库信息:
git remote -v
删除远程库:
git remote rm xxx
#此处的删除是本地与远程解绑,物理删除要到github删除
```
克隆远程库到本地:
```bash
git clone [email protected]:yourname/xxx.git
```
标签:复健,HEAD,git,add,使用,readme,commit,bash From: https://www.cnblogs.com/ziggystardust-pop/p/17056365.html