GIT&GITHUB
Posted wu-zang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GIT&GITHUB相关的知识,希望对你有一定的参考价值。
Git&GitHub
版本控制
个人版本控制
在进行开发的时候,程序需要经常性的修改,那么修改的时候就存在备份问题,当代码量较大修改频繁时,备份的及时性和备份的困难度就增加了。
团队版本控制
当团队中多人协同开发同一个功能时,可能存在开发人员之间的版本互相覆盖问题。
版本控制特点
协同修改
对人可以并行地修改同一个文件。
数据备份
不仅保存数据当前地实际状态,还能保存文件提交地历史状态,可以回滚操作。
版本管理
保存版本时不保存重复数据,节约存储,提高运行效率。
权限控制
对团队中参与开发的人员进行权限控制,对其他开发人员贡献的代码进行审核。
历史记录
查看提交修改历史,版本回滚
分支管理
允许开发团队在工作过程中多条生产线同时推进任务,提高效率。
工具简介
集中式:SVN、CVS、VSS。以服务器为核心,容易出现单点故障问题。
分布式:GIT、Mercurial、Bazaar、Darcs,避免了单点故障。
GIT
优势
- 版本控制可在本地完成
- 完整性保证
- 添加大于删除和修改
- 分支操作快捷流畅
- bash融合
结构
- Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。
- WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间,除了.git之外的都属于工作区。
- .git:存放Git管理信息的目录,初始化仓库的时候自动创建。
- Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。
- Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。
- Stash:是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。
本地操作
初始化本地库
git init //在目录中将创建一个.git目录
设置签名
设置一个用户信息,用于唯一标示身份,仅用于区分开发人员,信息和远程仓库无关。
签名分为项目级别和系统级别,签名的作用域不同,项目/仓库级别在本仓库中有效,优先使用仓库级别。签名必须设置才能执行操作。
git config user.name xxx
git config user.email [email protected]
git config --global user.name xxx
git config user.email [email protected]
$ cat ~/.gitconfig
[user]
email = [email protected]
name = Wan9huan
//全局签名存储在全局配置文件中
//仓库签名保存在.git/config中
常用命令
git status 查看状态
git add 添加文件到缓存区
git remove --cached 移除已经add的文件
git commit 提交
git commit -a -m"This is Message" 提交附带注释
git log 查看日志
git log --oneline 简洁查看
git relog 查看日志和回滚步数
git reset --hard HEAD^ 后退一步
git reset --hard HEAD~3 后退三步
git reset --hard 2fedc85 回到指定版本
--------------------------------------------------------------------------------
$ git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
--------------------------------------------------------------------------------
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
ReactDemo/
2017-09-07.png
nothing added to commit but untracked files present (use "git add" to track)
--------------------------------------------------------------------------------
$ git add 2017-09-07.png
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage) // 从缓存区移除
new file: 2017-09-07.png
Untracked files:
(use "git add <file>..." to include in what will be committed)
--------------------------------------------------------------------------------
$ git commit
[master (root-commit) c40dd30] Changes to be committed: new file: 2017-09-07.png
//版本号
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 2017-09-07.png
--------------------------------------------------------------------------------
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
--------------------------------------------------------------------------------
$ git log --oneline
8b6ba42 (HEAD -> master) Create A Book Text
37c34e8 deleted: Photoshop_Set-Up.exe
4cfa483 (origin/master) last
a2858e8 new
4b3e03e aa
dc03544 Merge branch 'master' of https://github.com/wan9huan/myfiles
9b3d010 all
9382437 Delete background.png
bb31bd9 Changes to be committed: new file: icon 2.png
b386c61 a
4366632 a
fc86b6a png for background
--------------------------------------------------------------------------------
$ git reflog
8b6ba42 (HEAD -> master) [email protected]{0}: commit: Create A Book Text
37c34e8 [email protected]{1}: commit: deleted: Photoshop_Set-Up.exe
4cfa483 (origin/master) [email protected]{2}: commit: last
a2858e8 [email protected]{3}: commit: new
4b3e03e [email protected]{4}: commit: aa
dc03544 [email protected]{5}: pull: Merge made by the 'recursive' strategy.
9b3d010 [email protected]{6}: commit: all
bb31bd9 [email protected]{7}: commit: Changes to be committed:
b386c61 [email protected]{8}: commit: a
4366632 [email protected]{9}: commit: a
fc86b6a [email protected]{10}: commit (initial): png for background
--------------------------------------------------------------------------------
$ git reflog book.txt
5997266 (HEAD -> master) [email protected]{0}: commit: 第四次修改
2fedc85 [email protected]{1}: commit: 第三次修改
af72196 [email protected]{2}: commit: add a string
8b6ba42 [email protected]{3}: commit: Create A Book Text
--------------------------------------------------------------------------------
//回滚、回到指定版本
$ git reflog book.txt
5997266 (HEAD -> master) [email protected]{0}: commit: 第四次修改
2fedc85 [email protected]{1}: commit: 第三次修改
af72196 [email protected]{2}: commit: add a string
8b6ba42 [email protected]{3}: commit: Create A Book Text
$ cat book.txt
This is a Book Text
333333333333333
444444444444444
$ git reset --hard af72196
HEAD is now at af72196 add a string
$ cat book.txt
This is a Book Text
$ git reset --hard 2fedc85
HEAD is now at 2fedc85 第三次修改
$ cat book.txt
This is a Book Text
333333333333333
--------------------------------------------------------------------------------
$ git reset --hard HEAD^ 后退一步
$ git reset --hard HEAD~3 后退三步
Rest指令
git rest --soft 移动本地库指针
git rest --mixed 移动本地库、重置暂存区
git rest --hard 移动本地库、重置暂存区、重置工作区
比较文件差异
git diff 暂存区比较
git diff Head 比较某一版本
--------------------------------------------------------------------------------
$ git diff book.txt
diff --git a/book.txt b/book.txt
index 48d8508..f2259a8 100644
--- a/book.txt
+++ b/book.txt
@@ -1,2 +1,4 @@
This is a Book Text
-333333333333333
No newline at end of file
+333333333333333
+444444444444444
+555555555555555
No newline at end of file
分支
- 并行推进多个开发
- 分支彼此独立
- 热修复
git status 查看当前分支
git branch -v 查看所有分支
git branch xxx 创建分支
git checkout xxx 切换分支
--------------------------------------------------------------------------------
$ git status -v
On branch master //主分支
Your branch is ahead of 'origin/master' by 5 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
$ git branch -v
* master 828b1ab [ahead 5] commit all
$ git branch hot_fix
$ git checkout hot_fix
Switched to branch 'hot_fix'
--------------------------------------------------------------------------------
#分支合并
1.切换到主分支
2.执行 git merge xxxx
--------------------------------------------------------------------------------
git checkout xxxx
git merge xxxx
--------------------------------------------------------------------------------
冲突解决
- 发生文件冲突,进入冲突解决状态
- 打开文件可以查看到冲突内容
- 删除冲突标记并修改文件
- 提交完成合并分支
以上是关于GIT&GITHUB的主要内容,如果未能解决你的问题,请参考以下文章