手机版 欢迎访问it开发者社区(www.mfbz.cn)网站

当前位置: > 开发

【Git】

时间:2021/5/23 9:42:26|来源:|点击: 次

Git简介

  • Git:分布式版本控制系统,相比而言CVS及SVN都是集中式的版本控制系统。
  • win10下载链接https://git-scm.com/download/win
    安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
    安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

global参数表示自己机器上所有的Git仓库都会使用这个配置,不过也可以对某个仓库指定不同的用户名和Email地址。

创建版本库/仓库(repository)

  1. 创建一个空目录
~$ 
mkdir learngit
cd learngit
pwd      #显示当前目录
  1. 把创建的目录变成Git可以管理的仓库
~$
git init

这样就在这个目录下创建成功了一个空的仓库,(这个目录下多了一个.git的目录,用来跟踪管理版本库的,不要手动修改这个目录中的文件)
可以通过代码lr查看当前目录下的文件,发现not found,这是因为这个目录默认是隐藏的,使用ls -ah命令就可以看到了。
补充:并不是必须在空目录下创建Git仓库的。

  1. 把文件添加到版本库中
    ①在learngit文件夹目录或子目录下编写一个readme.txt的文件,内容为
    Git is a version control system.
    Git is free software.
    ②把该文件添加到仓库中
~$
git add readme.txt

③把该文件提交到仓库

~$
git commit -m "wrote a readme file"

-m后面输入的是本次提交的说明,可以是任意内容,最好的对自己改动的有意义的说明,大家都可以看到这个说明。
git commit命令执行成功后会显示1 file changed(1个文件被改动,因为添加了readme.txt文件),2 insertions(插入了两行内容,因为readme.txt文件有两行内容)

④对于多个文件:
可以多次add不同的文件,用commit一次提交多个文件

~$
git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files."

init初始化 ->add + commit“两步走”

说明:
除git init外,Git命令必须在Git仓库目录内执行,在仓库目录外执行是没有意义的。
添加某个文件时,该文件必须在当前目录下存在,用ls或者dir命令查看当前目录的文件,看文件是否存在。

修改文件,将其提交到Git版本库

  1. 修改文件现在修改readme.txt文件内容为:
    Git is a distributed version control system.
    Git is free software.
    其实就是比之前的文件内容在第一行中加了distributed 这个单词。

  2. 查看仓库状态
    git status命令可以查看当前仓库的状态,会显示结果:

changes not staged for commit,… modified: readme.txt

这表示 readme.txt已经被修改过了,但还没有做好修改的提交

使用git diff readme.txt查看文件的不同变化different,会显示

-Git is a version control system.
+Git is a distributed version control system.^M
Git is free software.

表示减少了一行Git is a version control system,增加了一行Git is a distributed version control system,有一行 Git is free software内容没有发生变化。

  1. add修改的文件
    使用git add readme.txt命令,
    再使用git status查看仓库状态,会显示:

Changes to be committed:

说明需要提交的修改包括readme.txt。

  1. commit修改的文件
    使用git commit -m "add distributed"命令进行说明,
    再使用git status查看仓库状态,会显示:

nothing to commit, working directory clean

这说明当前没有需要提交的修改,而且工作目录是干净的。

看状态用git status,看修改内容用git diff

再将内容修改为:
Git is a distributed version control system.
Git is free software distributed under the GPL.
使用代码:

~$
git add readme.txt
git commit -m "append GPL"

查看修改历史记录

git log命令可以查看之前所有修改的id号和commit内容,从近到远顺序排列如下:

commit d1010c5b8640f4257fb783a0e9b85cf5b62378d6
Author: xjy
Date: Fri Jan 15 15:53:13 2021 +0800
append GPL
commit fcb5fabc9bc27eacd15384db178b1db30459e1c4
Author: xjy
Date: Fri Jan 15 15:29:07 2021 +0800
add distributed
commit 2ea3b9ec23956887d35c87357f1fe76aa183f9c0
Author: xjy
Date: Fri Jan 15 15:11:50 2021 +0800
wrote a readme file

git log --pretty=oneline可以让显示结果更简洁,如下:

d1010c5b8640f4257fb783a0e9b85cf5b62378d6 append GPL
fcb5fabc9bc27eacd15384db178b1db30459e1c4 add distributed
2ea3b9ec23956887d35c87357f1fe76aa183f9c0 wrote a readme file

git reset --hard HEAD^ 命令可以返回上一版本的内容,其中HEAD指当前版本,HEAD^ 指上一版本,HEAD^^指上上版本,对于往前100个版本,可以用HEAD~100来表示。
此时会显示:

HEAD is now at fcb5fab add distributed

cat readme.txt命令读取文件 readme.txt:

Git is a distributed version control system.
Git is free software.

此时git log命令就看不到第三次修改的版本了,因为现在已经回退到了第二版本。
但是从之前的命令可以看到第三次修改的版本的id号为d1010c5b8640f4257fb783a0e9b85cf5b62378d6,所以用git reset --hard d1010c即可回到第三次修改的版本,不用把id号完整输入,输入前几位就可以了。
再使用cat readme.txt命令,得到:

Git is a distributed version control system.
Git is free software distributed under the GPL.

git reflog可以看之前的修改记录,从那里可以看到每一步对应的id号。

工作区和暂存区

工作区working directory,比如learngit文件夹就是一个工作区。
版本库repository,里面有很多东西,比如暂存区和自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
暂存区stage/index,git add命令就是将文件放入暂存区中。
在这里插入图片描述

git checkout --readme.txt丢弃工作区的修改,分为两种情况:
①readme.txt修改后还没有git add放到暂存区,现在,撤销修改就回到和版本库一样的状态;
②readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commitgit add时的状态。

git reset HEAD readme.txt暂存区(还没有commit)的修改撤销掉(unstage),重新放回工作区。

rm test.txt删除文件test.txt,之后

  1. 使用git rm test.txt从版本库中删除该文件,并且git commit --m "remove test.txt";
  2. 使用git checkout --test.txt,还原;
  3. 但是!从来没有被添加到版本库就被删除的文件,是无法恢复的!

Git跟踪并管理的其实是修改,而不是文件。

远程仓库

git clone git@github.com:xujingyi/gitskills.git从GitHub上面的远程库gitskills中克隆一个本地库,对于GitHub中地址还有http://xxx.git这种,只是速度慢一些。

分支管理

1.创建和合并分支

git switch -c devgit checkout -b dev创建dev分支,然后切换到dev分支,这一步相当于git branch devgit checkout dev两条命令。
git branch查看所有分支,结果是* dev,master,*后面的表示当前分支。
③对readme.txt进行修改,然后提交,git add readme.txtgit commit -m"branch test".
git switch mastergit checkout master切换回master分支,发现readme.txt文件并没有被修改,因为刚刚的修改是在dev分支上,而master分支此刻的提交点并没有变。
git merge dev将dev分支的工作成果合并到master上,这个命令会合并指定分支到当前分支,此时再查看readme.txt是修改过的内容了。
git branch -d dev删除dev分支。

建议使用分支完成某个任务,合并后再删掉分支,过程会更安全。

2.分支管理
合并分支时,Git会优先使用Fast forward模式,在这种模式下,删除分支后会丢掉分支信息,所以可以强制禁用此种模式,Git就会在merge时生成一个新的commit,就可以从分支历史上看出分支信息。
git switch -c dev创建并切换dev分支;
②修改文件,并提交一个新的commit:git add readme.txtgit commit -m"add merge"
git switch master切换回master;
git merge --no-ff -m"merge with no-ff" dev合并dev分支,禁用Fast forward;
git log查看分支历史。

git stash把当前工作现场储藏起来,等以后恢复现场后继续工作;
git stash list查看工作现场存储记录

多人协作

感谢:
https://www.liaoxuefeng.com/wiki/896043488029600

Copyright © 2002-2019 某某自媒体运营 版权所有