版本控制
Git
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 与 SVN 区别
-
Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
-
Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
-
Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
-
Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
-
Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
git安装
https://git-scm.com/downloads
Git 配置
- 用户配置
- 配置个人的用户名称和电子邮件地址:
$ git config --global user.name "runoob" $ git config --global user.email [email protected]
- 配置个人的用户名称和电子邮件地址:
- 查看配置信息
$ git config --list
- git生成ssh密钥
- 生成ssh key。
$ ssh-keygen -t rsa -C "[email protected]"
后面的邮箱改成自己的,之后会要求确认路径和输入密码,使用默认的一路回车就行。成功的话会在 ~/ 下生成 .ssh 文件夹,进去,打开 id_rsa.pub,复制里面的 key。 回到 git服务器上,进入账户配置添加ssh key。
- 生成ssh key。
- 验证ssh key
$ ssh -T [email protected]
获取与创建项目命令
git init
用 git init 在目录中创建新的 Git 仓库。 你可以在任何时候、任何目录中这么做,完全是本地化的。
1
git init
git clone
使用 git clone 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。
1
git clone [url]
基本快照
git add
git add 命令可将该文件添加到缓存
1
2
3
git add <filename>
git add .
git status
git status 以查看在你上次提交之后是否有修改。
1
2
git status
git status -s
git diff
执行 git diff 来查看执行 git status 的结果的详细信息。
git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景。
- 尚未缓存的改动:git diff
- 查看已缓存的改动: git diff –cached
- 查看已缓存的与未缓存的所有改动:git diff HEAD
- 显示摘要而非整个 diff:git diff –stat
git commit
使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中。
Git 为你的每一个提交都记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址。
1
2
git config --global user.name 'yourname'
git config --global user.email youremail
将文件写入缓存区并提供提交注释
1
2
3
4
5
git commit -m 'update'
git commit -m 'add files'
git commit -m 'delete files'
git reset HEAD
git reset HEAD 命令用于取消已缓存的内容。
1
2
3
4
5
6
git reset HEAD -- <filename>
//上一个版本就是 HEAD^,上上一个版本就是 HEAD^^ 或者 HEAD~2,HEAD~100
git reset --hard HEAD^
git reset --hard 1094a
//git reflog用来记录你的每一次命令
git reflog
拉取(更新代码)与推送
git pull
git pull命令用于从另一个存储库或本地分支获取并集成(整合)。git pull命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并,它的完整格式稍稍有点复杂。
1
2
git pull
git pull <远程主机名> <远程分支名>:<本地分支名>
将远程存储库中的更改合并到当前分支中。在默认模式下,git pull
是git fetch
后跟git merge FETCH_HEAD
的缩写。更准确地说,git pull
使用给定的参数运行git fetch
,并调用git merge
将检索到的分支头合并到当前分支中。
git push
git push
命令用于将本地分支的更新,推送到远程主机。它的格式与git pull
命令相似。
1
2
git push
git push <远程主机名> <本地分支名>:<远程分支名>
分支管理
创建与合并分支
1
2
3
4
5
6
7
8
9
10
11
12
git checkout -b dev
//相当于以下两条命令
git branch dev
git checkout dev
//查看当前分支
git branch
//切换回master分支
git checkout master
//把dev分支的工作成果合并到master分支
git merge dev
//删除dev分支
git branch -d dev
切换分支这个动作,用switch更科学
1
2
3
4
//创建并切换到新的dev分支
git switch -c dev
//切换到已有的master分支
git switch master
解决冲突
1
2
3
4
5
6
7
git merge feature1
//合并
git add readme.txt
//提交合并
git commit -m "conflict fixed"
//删除feature1分支
git branch -d feature1
bug分支
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//当前工作现场“储藏”起来
git stash
//假定在master分支上修复,就从master创建临时分支
git checkout master
git checkout -b issue-123
//提交
git add readme.txt
git commit -m "fix bug 123"
//切换到master分支,并完成合并,最后删除issue-123分支
git switch master
git merge --no-ff -m "merged bug fix 123" issue-123
//回到dev分支
git switch dev
//工作现场
git stash list
//恢复工作现场
git stash apply stash@{0}
git stash apply 恢复后,stash内容并不删除,你需要用git stash drop来删除
git stash pop 恢复的同时把stash内容也删了(推荐)
//bug提交的修改“复制”到当前分支,如:git cherry-pick 4c805e2
git cherry-pick <commit>
Feature分支
1
2
3
4
5
6
7
8
9
10
//创建分支
git switch -c feature-shop
//开发完毕
git add shop.java
git status
git commit -m "add feature shop"
//切回dev,准备合并
git switch dev
//此时,因各种原因新功能必须取消!强行删除
git branch -D feature-shop
多人协作
1
2
3
4
5
6
7
8
9
10
11
//查看远程库的信息
git remote -v
//拉取
git pull
//拉取失败,设置dev和origin/dev的链接
git branch --set-upstream-to=origin/dev dev
//再次拉取
git pull
//推送分支
git push origin master
git push origin dev
Svn
配合TortoiseSVN使用