#ubuntu:
sudo apt-get install git
winodws
https://git-scm.com/downloads
设置用户名和邮箱:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
#global表示本机上所有git仓库都使用这个配置
查看用户名和邮箱:
git config user.name
git config user.email
创建仓库repository
创建目录并进入,使用git init转换为git仓库
windows下目录名最好不要带中文
$ pwd
/d/firstgit
$ git init
Initialized empty Git repository in D:/firstgit/.git/
$ ls
$ ls -ah
./ ../ .git/
.git目录用于跟踪管理版本库
将创建的文本文件放入此目录
#添加到仓库
git add readme.txt
git无法跟踪图片/视频等二进制文件的具体变化
提交文件到仓库:
$ git commit -m "xxx" #本次提交的说明
[master (root-commit) d30cd93] xxx
1 file changed, 1 insertion(+)#一个文件被改动,插入一行内容
create mode 100644 readme.txt
commit一次可以提交多个文件,add也可以批量添加文件
修改
使用git status查看仓库状态
$ 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查看具体修改:
$ 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
版本回退:
$ git reset --hard HEAD^
HEAD is now at 70e6db6 modified
git log后可以看到最新的版本记录已经没了(其实是指针指向变化了)
要想恢复回来就要知道版本的commit id(使用git reflog)
$ 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中
撤销修改和删除
$ git checkout -- filename#丢弃工作区的修改
(1)修改后未add,则回到和版本库一样的状态
(2)修改后add但没有commit,则回到add后的状态
撤销add到暂存区的修改:
$ git reset HEAD readme.txt
再丢弃工作区修改
如果已经commit:回退版本(前提是还没提交远程仓库)
删除文件:
git status
会告知哪些文件被删除了,若要从版本库中删除则git rm <filename>
,并git commit
如果误删则撤销:git checkout -- <filename>
,前提是已经提交到了版本库
远程仓库 github
本地仓库和github仓库传输通过ssh加密
创建ssh key:
ssh-keygen -t rsa -C "xxxx@xxx.com"
在用户主目录创建了.ssh文件夹,且里面有id_rsa(私钥),id_rsa.pub(公钥)
然后打开github,进入Account settings的ssh keys页面,Add SSH Key,粘贴id_rsa.pub内容,点击Add Key
将本地库与远程库关联:
$ git remote add origin git@github.com:yourname/firstgit.git
远程库默认叫origin
推送:
$ git push -u origin master
查看远程库信息:
git remote -v
删除远程库:
git remote rm xxx
#此处的删除是本地与远程解绑,物理删除要到github删除
克隆远程库到本地:
git clone git@github.com:yourname/xxx.git