本地操作
windows下安装msysGit
运行Git Bash
设置全局name和email:
$ git config --global user.name "qinyuchen"
$ git config --global user.email "xxx@xxx.xxx"
创建目录,并将此目录设置为版本库(repository),这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”。
$ mkdir testgit
$ cd testgit
$ git init
在该目录下手动创建文件,如 t.txt
查看是否还有文件未提交 – >添加到暂存区 --> 提交到仓库 -->查看是否还有文件未提交
$ git status
$ git add t.txt
$ git commit -m "t.txt提交"
$ git status
修改文件内容,查看做了什么修改:
$ git diff t.txt
再次,提交:
$ git status
$ git add t.txt
$ git commit -m "t.txt 2.0 提交"
$ git status
查看历史记录:
$ git log
版本回退到上一个版本:
$ git reset --hard HEAD^
版本回退到上上个版本:
$ git reset --hard HEAD^^
版本回退到前100个版本:
$ git reset --hard HEAD~100
查看版本号:
$ git reflog
回退到指定版本:
$ git reset --hard 版本号
撤销修改:
- 直接手动修改文件,add并commit
- 回退到上一个版本
- 使用 git restore <file>, 它能将未add到暂存区的内容撤销掉。
commit文件后,将文件删除,可以使用restore恢复文件:
$ git add b.txt
$ git commit -m "提交b.txt"
$ rm b.txt
$ git restore b.txt
远程仓库
id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
将公钥复制黏贴:
在GIthub上创建一个名字同样为testgit的仓库:
把一个已有的本地仓库与之关联,把本地仓库的内容推送到GitHub仓库,在本地的testgit仓库下运行命令:
git remote add origin https://github.com/qinyu0831/testgit.git
再把本地仓库分支master内容推送到远程仓库去:
git push -u origin master
推送成功,可以在GitHub仓库看到相同的文件了:
从远程仓库克隆
在GitHub仓库创建一个新仓库,名为testgit2,并创建README文件:
在本地克隆一个本地库:
创建合并分支
在dev分支上修改内容,并提交:
切换回master分支,内容仍为之前的:
将dev的内容合并到master上:
git merge命令用于合并指定分支到当前分支上
合并完成后,我们可以接着删除dev分支了,操作如下:
总结创建与合并分支命令如下:
- 查看分支:git branch
- 创建分支:git branch name
- 切换分支:git checkout name
- 创建+切换分支:git checkout –b name
- 合并某分支到当前分支:git merge name
- 删除分支:git branch –d name
如何解决冲突
创建并切换到一个新分支 fz1, 并修改文件提交:
切换到master分支,添加一行内容6666666
在master分支上合并fz1的内容:
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,其中<<<HEAD是指主分支修改的内容,>>>>>fz1 是指fz1上修改的内容,我们可以修改如下后保存:
将内容修改成和master分支一样的,后commit:
查看合并情况:
分支管理策略
通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff来禁用”Fast forward”模式。首先我们来做demo演示下:
- 创建一个dev分支。
- 修改readme.txt内容。
- 添加到暂存区。
- 切换回主分支(master)。
- 合并dev分支,使用命令 git merge –no-ff -m “注释” dev
- 查看历史记录
使用no-ff合并后删除的分支,查看历史时还能找到:28b1c9e
分支策略:首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。
bug分支
在开发中,会经常碰到bug问题,那么有了bug就需要修复,在Git中,分支是很强大的,每个bug都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临时的分支删除掉。
dev分支正在readme文件上工作,还未提交,此时接到了一个bug需要紧急修复,工作进行到一半时候,我们还无法提交,Git还提供了一个stash功能,可以把当前工作现场 ”隐藏起来”,等以后恢复现场后继续工作。如下:
此时,我们可以切换到bug分支,进行bug修复工作:
修复完成后,切换到master分支上,完成合并,并删除xxx-bug分支:
完成后我们就可以回到dev分支上干活:
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,可以使用如下2个方法:
- git stash apply恢复,恢复后,stash内容并不删除,你需要使用命令git stash drop来删除。
- 另一种方式是使用git stash pop,恢复的同时把stash内容也删除了。
多人协作
当你从远程库克隆时候,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且远程库的默认名称是origin。
- 要查看远程库的信息 使用 git remote
- 要查看远程库的详细信息 使用 git remote –v
此时,远程库的内容如下:
本地代码如下:
将本地更新的readme.txt推送到远程库中:
(注意:手动输入yes,不要直接回车)
推送成功。
可以看到 推送成功了,如果我们现在要推送到其他分支,比如dev分支上,我们还是那个命令 git push origin dev
那么一般情况下,那些分支要推送呢?
master分支是主分支,因此要时刻与远程同步。
一些修复bug分支不需要推送到远程去,可以先合并到主分支上,然后把主分支master推送到远程去。