参考这个博客讲的非常好:
解决冲突 - Git教程 - 廖雪峰的官方网站 (liaoxuefeng.com)
集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。集中式版本控制系统最大的毛病就是必须联网才能工作。
这个文档已经写的很清晰了:
windows安装git
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
git config
命令的--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
创建版本库
在当前文件夹下:
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
将文件添加到版本库
将文件添加到版本库分两步,一步add,一步commit。git add 目的是将修改文件由工作区提交到暂存区,可以多次提交。
工作区和暂存区
工作区:电脑里能看到的目录。
版本库(Repository):暂存区,还有Git为我们自动创建的第一个分支master。
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master
分支,所以,现在,git commit
就是往master
分支上提交更改。
查看文件内容。
$ cat 文件名
然后commit操作,将文件从暂存区提交到版本库
单个文件:
$ git add readme.txt
$ git commit -m "wrote a readme file"
-m
后面输入的是本次提交的说明,可以输入任意内容
查看文档内容:
多个文件:
添加制定目录下的文件:
config目录下及子目录下所有文件,home目录下的所有.php文件
git config/*
git home/*.php
添加所有的文件
git add .
git add --all
然后再提交。
连接gitee
首先需要将自己的ssh公钥输入给gitee
关于windows获取公钥可以参考这个链接:
Windows下生成ssh密钥,并用ssh免密访问Linux服务器_windterm怎么添加密钥对-优快云博客
gitee中也有提示如何操作。
然后检查是否连上了公钥:
$ ssh -T git@gitee.com
然后就可以在gitee中创建仓库,创建后将这个仓库和本地仓库连接:
git remote add origin 仓库地址
这里需要输入gitee的账号密码,账号是个人中心中@后的数字。
接下来将仓库文件上传到gitee
git push -u origin "master"
当我们有添加文档时需要重新在本地add、commit然后push之后才能同步到gitee。
修改删除文件
修改文件
修改文件后需要重新commit。
git status
命令可以让我们时刻掌握仓库当前的状态
$ git status
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <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 文件名
版本回退
查看版本日志:
$ git log
回退之前的版本:
$ git reset --hard 版本号不需要输全
再次恢复到新的版本,需要找到那个版本的id,用如下命令查看
$ git reflog
每一次修改文件后都需要先add放入暂存区后再提交,否则无法进入master里。因为Git跟踪并管理的是修改,而非文件。
撤销修改
1.修改后还没有add,直接丢弃工作区的修改。
$ git checkout --文件名
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
2.修改后add操作了。但是没有commit。
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt
git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本。
3.修改后,commit了。利用版本回退。不过前提是没有推送到远程库。
删除文件
删除工作区的文件
$ rm test.txt
会导致作区和版本库就不一致。
用命令git rm
删掉版本库中的文件,并且git commit
$ git rm test.txt
$ git commit -m "remove test.txt"
另一种情况是删错了,因为版本库里还有,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout -- test.txt
分支管理
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,简直让人无法忍受,结果分支功能成了摆设,大家都不去用。
但Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。
git问题error: remote origin already exists.
如果你clone下来一个别人的仓库,在此基础上完成你的代码,推送到自己的仓库可能遇到如下问题:
error: remote origin already exists.表示远程仓库已存在。
因此你要进行以下操作:
1、先输入git remote rm origin 删除关联的origin的远程库
2、关联自己的仓库 git remote add origin https://gitee.com/xxxxxx.git
3、最后git push origin master,这样就推送到自己的仓库了。