git是一个分布式版本控制工具,免费的开源的。可以用于项目代码管理。
官方网站:git官网
版本控制就是类似于一个历史记录的工具。比如说他
xxxx年xx月xx日 版本v_1.0
xxxx年xx月xx日 版本v_1.1
xxxx年xx月xx日 版本v_2.0
…
版本控制是一种记录文件内容变化的,以便查阅特定版本修订情况的系统
版本控制其实最重要的是可以记录文件来修改历史记录,从而让用户能够真正的查看历史版本,以方便版本切换。
个人开发过渡到团队协作。平时我们在学习和记笔记的时候,多多少少都会利用到版本控制。比如说我们更新迭代我们的学习笔记。在企业开发中,因为涉及到了多人的团队合作,有的时候小王写了一个功能A的代码,小李第二天对这个功能进行了修改和完善。为了使得小王和小李的代码都能发挥出作用,这个时候就需要版本控制。
小王第一天写了一个大概的功能A的思路框架,利用版本工具提交了一份,第二天小李更新代码看到了,顺手完善了这个功能A,提交了,这样小王就可以看到小李优化完善后的功能A。
代码托管中心是基于网络服务的远程代码仓库,一般我们简单的成为远程库,origin
git config --global user.name 用户名 设置用户签名
git config --gloabl user.password 用户密码 设置用户密码
git init 初始化git仓库
git status 查看本地仓库中状态
git add 文件名 将本地工作区内有修改的文件提交到暂存区内
git commit -m "日志信息" 文件名 将暂存区的文件提交到本地仓库
git reflog 查看历史的日志信息
git reset --hard 版本号 版本回退
基本语法:
只用设置一次用户签名及可以,在桌面的任意位置右键,前提是安装好了git
在git bash 中输入上述的 命令
查看是否成功,在用户目录下的.gitconfig文件下,签名的作用,是为了区分那一个人操作了这个文件
基本语法
git init
基本语法
git status
因为此时没有过任何的操作,所以,这里输出的日志信息(所在的分支是master分支,没有提交文件记录,创建或者复制文件并且使用git add命令才会有记录)
【故此,创建一个文件】
【使用 git add】
基本语法
git add 文件名
此时发现,git add完了之后,在使用git status命令查看后,提示暂存区有一个暂未提交的文件,如果你想从暂存区移除此文件,可以使用git rm --cached 文件命令移除暂存区
基本语法
git commit -m "日志信息" 文件名
基本语法
git log # 查看详细日志
git reflog # 查看历史日志
当我们使用vim编辑器对demo.txt进行修改之后,在使用git status查看状态会出现下图:
如此我们只需按照上面的步骤,再次 git add ;git commit操作
再次提交完成后,查看git的状态,以及查看日志发现此时的日志执政HEAD指向的第二个版本。那么证明,我们第二次修改的记录生效了
基本语法
git reset --hard 版本号
案例实操
wyp@weiwei MINGW64 ~/Desktop/git-demo (master)
$ cat demo.txt
11111
22222
hahahah 333333
hahhaha 333333
wyp@weiwei MINGW64 ~/Desktop/git-demo (master)
$ git reflog
bef048b (HEAD -> master) HEAD@{0}: commit: 第三次修改
2028676 HEAD@{1}: commit: 第二次修改
94c6198 HEAD@{2}: commit (initial): 第一次提交
wyp@weiwei MINGW64 ~/Desktop/git-demo (master)
$ git reset --hard 2028676
HEAD is now at 2028676 第二次修改
wyp@weiwei MINGW64 ~/Desktop/git-demo (master)
$ git reflog
2028676 (HEAD -> master) HEAD@{0}: reset: moving to 2028676
bef048b HEAD@{1}: commit: 第三次修改
2028676 (HEAD -> master) HEAD@{2}: commit: 第二次修改
94c6198 HEAD@{3}: commit (initial): 第一次提交
wyp@weiwei MINGW64 ~/Desktop/git-demo (master)
$ cat demo.txt
11111
22222
hahahah
hahhaha
wyp@weiwei MINGW64 ~/Desktop/git-demo (master)
在版本控制中,同时推进多个任务,为每个任务,我们就可以创建每个人物的单独分支,使用分支意味着程序员可以从开发主线上分离开来,我们可以在我们的分支里自己开发自己的代码。不影响主线分支的使用。
同时并行的推进多个功能的开发,提高开发效率。
各个分支在开发的过程中,如果某一个分支开发失败,不会影响其他分支的使用,只需要将失败错误的分支删除即可。
git branch 分支名 # 创建分支
git branch -v # 查看分支
git checkout 分支名 # 切换分支
git merge 分支名 # 将指定的分支合并到当前分支
【查看当前所在的分支】
【创建分支】
【切换分支】
【在test分支下修改提交文件】
$ cat demo.txt
11111
22222
hahahah 333333
hahhaha 333333
wyp@weiwei MINGW64 ~/Desktop/git-demo (test)
$ vim demo.txt
wyp@weiwei MINGW64 ~/Desktop/git-demo (test)
$ git status
On branch test
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified: demo.txt
no changes added to commit (use "git add" and/or "git commit -a")
wyp@weiwei MINGW64 ~/Desktop/git-demo (test)
$ git add demo.txt
wyp@weiwei MINGW64 ~/Desktop/git-demo (test)
$ git commit -m "第四次提交 test 分支修改" demo.txt
[test 692c890] 第四次提交 test 分支修改
1 file changed, 1 insertion(+), 1 deletion(-)
wyp@weiwei MINGW64 ~/Desktop/git-demo (test)
$ git status
On branch test
nothing to commit, working tree clean
wyp@weiwei MINGW64 ~/Desktop/git-demo (test)
$ git reflog
692c890 (HEAD -> test) HEAD@{0}: commit: 第四次提交 test 分支修改
bef048b (master) HEAD@{1}: checkout: moving from master to test
bef048b (master) HEAD@{2}: reset: moving to bef048b
2028676 HEAD@{3}: reset: moving to 2028676
bef048b (master) HEAD@{4}: commit: 第三次修改
2028676 HEAD@{5}: commit: 第二次修改
94c6198 HEAD@{6}: commit (initial): 第一次提交
wyp@weiwei MINGW64 ~/Desktop/git-demo (test)
$ cat demo.txt
11111
22222
hahahah 333333
hahhaha 333333
test 444444444
wyp@weiwei MINGW64 ~/Desktop/git-demo (test)
在git命令里,合并分支,总共有两种方式
这两种方式有区别:
git merge与git rebase的区别
个人建议使用git merge的方式
基本语法:git merge 合并的分支
注意:这个merge语法把指定的分支合并到当前分支下
我相信在我们日常的开发中,难免会遇到这种情况,就是代码分支合并时发生了冲突,原因很简单:
master分支对demo.txt进行了修改并提交
test分支也对demo.txt进行了修改并提交。
【如何解决冲突】
遇到这种情况,我们只能手动修改冲突,即:
遇到这种的:
<<<< HEAD的是当前版本所修改的地方,
>>>> test 是test分支下所修改的地方,
>>>> 这之后我们往往希望的是将两次修改的地方均保存,那么就需要把他和并成这样,并删除分隔符
>>>>
wyp@weiwei MINGW64 ~/Desktop/git-demo (master|MERGING)
$ cat demo.txt
11111
22222
hahahah 333333
hahhaha 333333
<<<<<<< HEAD
test 444444444
master modify here
=======
test 444444444 test modify here
>>>>>>> test
wyp@weiwei MINGW64 ~/Desktop/git-demo (master|MERGING)
$ vim demo.txt
wyp@weiwei MINGW64 ~/Desktop/git-demo (master|MERGING)
$ git add demo.txt
wyp@weiwei MINGW64 ~/Desktop/git-demo (master|MERGING)
$ git status
On branch master
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
Changes to be committed:
modified: demo.txt
wyp@weiwei MINGW64 ~/Desktop/git-demo (master|MERGING)
$ git commit -m "merge master分支和test分支"
[master aeec332] merge master分支和test分支
wyp@weiwei MINGW64 ~/Desktop/git-demo (master)
$ git status
On branch master
nothing to commit, working tree clean
wyp@weiwei MINGW64 ~/Desktop/git-demo (master)