创建版本库
版本库又名为仓库,可以简单理解成一个目录。这个目录里面的所有文件都可以被git管理起来,每个文件的修改,删除,git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以"还原"。
所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:
mkdir learngit
cd leargit
pwd #用于显示当前目录
第二步,通过git init命令把这个目录变成git可以管理的仓库
git init
这样就把仓库建好了,而且是一个空的仓库(empty git repository),此时当前目录下多了一个.git的目录,这个目录是git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然乱改了,就把git仓库给破坏了。
如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用 ls -ah命令就可以看见。
把一个文件放到git仓库只需两步
第一步,用命令 git add告诉git,把文件添加到仓库
git add readme.txt
第二步,用命令git commit告诉git,把文件提交到仓库
git commit -m "fix"
我们已经成功的添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是。我们修改readme.txt.修改文件
现在,运行git status 命令看看结果
虽然git告诉我们radme.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的。所以,需要用git diff 这个命令来看。
git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式.
然后,我们可以继续提交,并查看当前状态
Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的。
版本回退
不断对文件进行修改,一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit
恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
实际工作中,我们可以用 git log命令查看日志
需要友情提示的是,你看到的一大串类似1094adb...的是commit id(版本号)
上一个版本就是 HEAD^,上上一个版本就是 HEAD^,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100
git reset --hard HEAD^
HEAD 指向的版本就是当前版本,因此,git允许我们在版本的历史之间穿梭,使用命令 git reset --hard commit_id
用 git log可以查看提交历史,以便确定要回退的哪个版本
用git reflog查看命令历史,以便确定要回到未来的哪个版本
例如,我们在工作区写错东西或其它,可以用 git checkout -- file可以丢弃工作区的修改
git checkout -- readme.txt
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
在git中,删除也是一个修改操作,我们直接在文件中把不用的删了,或者用 rm命令删了
rm jia.txt
这个时候,git知道你删除了文件,因此,工作区和版本库就不一致了,git status
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
现在,文件就从版本库中被删除了。
远程仓库*
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
ssh-keygen -t rsa -C "[email protected]"
一路回车
登录gitee,在“ssh keys”里粘贴id_res.pub的内容
已有仓库?*
cd existing_git_repo
git remote add origin https://gitee.com/luckyle0628/learngit.git #把它与远程库关联
git push -u origin "master"
我们在本地库上使用命令git remote add把它和Gitee的远程库关联:
**
git add .
git commit -m "fix"
git pull
pit push origin master
**