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)
- 创建一个空目录
~$
mkdir learngit
cd learngit
pwd #显示当前目录
- 把创建的目录变成Git可以管理的仓库
~$
git init
这样就在这个目录下创建成功了一个空的仓库,(这个目录下多了一个.git的目录,用来跟踪管理版本库的,不要手动修改这个目录中的文件)
可以通过代码lr
查看当前目录下的文件,发现not found,这是因为这个目录默认是隐藏的,使用ls -ah
命令就可以看到了。
补充:并不是必须在空目录下创建Git仓库的。
- 把文件添加到版本库中
①在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版本库
-
修改文件现在修改readme.txt文件内容为:
Git is a distributed version control system.
Git is free software.
其实就是比之前的文件内容在第一行中加了distributed 这个单词。 -
查看仓库状态
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内容没有发生变化。
- add修改的文件
使用git add readme.txt
命令,
再使用git status
查看仓库状态,会显示:
Changes to be committed:
说明需要提交的修改包括readme.txt。
- 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 commit
或 git add
时的状态。
git reset HEAD readme.txt
把暂存区(还没有commit)的修改撤销掉(unstage),重新放回工作区。
rm test.txt
删除文件test.txt,之后
- 使用
git rm test.txt
从版本库中删除该文件,并且git commit --m "remove test.txt"
; - 使用
git checkout --test.txt
,还原; - 但是!从来没有被添加到版本库就被删除的文件,是无法恢复的!
Git跟踪并管理的其实是修改,而不是文件。
远程仓库
git clone git@github.com:xujingyi/gitskills.git
从GitHub上面的远程库gitskills中克隆一个本地库,对于GitHub中地址还有http://xxx.git这种,只是速度慢一些。
分支管理
1.创建和合并分支
①git switch -c dev
或git checkout -b dev
创建dev分支,然后切换到dev分支,这一步相当于git branch dev
和git checkout dev
两条命令。
②git branch
查看所有分支,结果是* dev,master,*后面的表示当前分支。
③对readme.txt进行修改,然后提交,git add readme.txt
和git commit -m"branch test"
.
④git switch master
或git 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.txt
和git 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