备份工具,比如你做了一个椅子,然后用这工具备份一下,误删以后可以用这工具恢复(不能误删椅子的备份)。然后呢,你的椅子可能不是很完美,还要修修改改,这是你可以同时备份椅子的新的版本,如此而已。

基本概念

  • 仓库 (存放"椅子"的地方)

  • 基线 (基本的椅子)

  • 分支 (基本椅子分出来的具体功能的椅子,如人体工学椅,躺椅。。)

  • 冲突 (多人合作修改同一把椅子,给出的提示)

下面以比较流行的 git 为例说明吧

git

初始配置

设置一下仓库作者的个人信息什么的

1
2
3
4
git config [--system,--global, --list]

用户名 user.name = "用户名"
邮箱 user.email = "邮箱"

配置 SSH 远程传输

创建 SSH Key:

1
  $ ssh-keygen -t rsa -C "youremail@example.com"

然后把公钥 id_rsa.pub 的内容复制到 Github "Account settings" 的 SSH Keys 中。

可以使用 ssh -v git@github.com 命令来测试链接是否畅通

用法

初始化版本系统

1
  git init <DIR>

暂存区管理

暂存区保存你历史记录的一个缓存区,为的就是让你"多此一举",进行下一步确认是否保存快照

把文件加入暂存区
1
2
  git add <modified files>
  git add .
删除暂存区里的文件,如需纳入版本库,需要重新添加
1
  git rm --cached <file>
重置暂存,就是恢复成未暂存的状态
1
  git reset HEAD <file>
改名文件
1
git mv [file-original] [file-renamed]

本地库管理

保存到本地库
1
  git commit -m "msg"
撤销 [ 恢复到修改前]
1
2
3
  git checkout <file>
  # 从另一个分支恢复修改 
  git checkout <branch>  <file>
反转(用本地版本库的东西替换掉本地的文件,再执行一次反过来)
1
2
3
4
  git revert HEAD                  撤销前一次 commit
  git revert HEAD^               撤销前前一次 commit
  git revert commit-id(比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
  git revert 是提交一个新的版本,将需要 revert 的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。
分支管理
创建分支
1
2
3
  git branch <BRANCHNAME> 
  # 从某分支创建分支 
  git checkout -b <ALTERNATE> <BRANCHNAME>
切换分支
1
  git checkout <BRANCHNAME>
合并分支
直接合并 把两条分支上的历史轨迹合并
1
git merge
压合合并 如果想把某个分支的提交作为一个整体记录时,可以使用压合合并。
1
git merge --squash <BRANCH>
拣选合并 只需合并某个提交,而不是全部改动.
1
git cherry-pick <ID>
修改分支名称
1
git branch -m <BRANCHNAME> <NEWBRANCHNAME>
删除分支
1
  git branch -d <BRANCHNAME>
stash(储藏)

可以先用 git stash save xxx 来保存工作区的内容,然后新建 一个分支并调用 git stash pop

分支的变基 rebase
1
2
  git checkout experiment
  git rebase master

远程仓库管理

克隆远程到本地仓库
1
2
git clone RESP
git clone --depth=1 RESP 只克隆最新的
添加远程源
1
  git remote add origin https://github.com/hanyudeye/test.git
远程同步
1
2
3
  git push -u origin master
  # 将本地分支上的提交推送到远程某分支 
  git push origin <BRANCH>:<REMOTEBRANCH>
更新本地
1
2
git pull
git pull git://github.com/tom/test.git
查看远程分支情况
1
2
git branch -r # 查看远程 branch
git checkout -b bug_fix_local bug_fix_remote #把本地端切换为远程的 bug_fix_remote branch 并命名为 bug_fix_local
修改远程仓库
修改
1
git remote  set-url origin [url]
先删后加
1
2
git remote rm origin
git remote add origin [url]
强制覆盖本地
1
2
3
git fetch --all
git reset --hard origin/master
git pull

日志查看

仓库状态
1
2
3
git status
git status -s 简短信息
git remote -v 列出服务器地址
查看提交历史
1
2
  git log
  git log --oneline 简洁--graph 拓扑图 '--reverse'逆向显示

–author 指定用户日志 如果你要指定日期,可以执行几个选项:–since 和 –before,但是你也可以用 –until 和 –after。

查看某次提交的内容
1
git show <id>
更详细的信息
1
2
3
  git blame <FILE>
  # 具体行的细节
  git blame -L 12,13 <FILE>

比较区别

1
2
3
4
5
6
7
  比较修改文件与暂存区的区别  git diff <FILE>
  比较暂存区和版本库的区别 git diff --cached <FILE>   
  比较不同版本区别 git diff <HEAD>

  git diff branch1 branch2 --stat   //显示出所有有差异的文件列表
  git diff branch1 branch2 文件名(带路径)   //显示指定文件的详细差异
  git diff branch1 branch2                   //显示出所有有差异的文件的详细差异

TAG

这是版本信息

某个分支创建标签
1
2
  git tag  [ TAG ] [BRANCH] 
  git tag 1.0  [branch]
查看可发布版本
1
  git tag
签出标签
1
  git checkout 1.0

使用 Git 子模块跟踪外部版本库

1
2
3
4
5
6
添加子模块 git submodule add <RESP> <MODULENAME>
显示子模块 git submodule

克隆含子模块的版本库
还要初始化子模块  git submodule init <MODULENAME>
然后更细 git submodule update <MODULENAME>

gitignore 忽略文件

1
2
3
4
5
6
7
以斜杠“/”开头表示目录; 
以星号“*”通配多个字符;
以问号“?”通配单个字符
以方括号“[]”包含单个字符的匹配列表;
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
规则:/fd1/*
说明:忽略根目录下的 /fd1/ 目录的全部内容;根目录指项目的的根目录

github

免费给你放照片的地方,如果想要隐私,就要付费了啊

主要功能

1
2
3
4
5
Git 仓库
Issue
Wiki
Pull Request
社交功能,follow(关注), star(赞),Organization (组织)