Git 是一个开源的分布式版本控制系统,用于高效地处理任何大小的项目。它由Linus Torvalds为了帮助管理Linux内核开发而开发的开放源码软件。与常用的版本控制工具(如CVS、Subversion)不同,Git采用了分布式版本库的方式,不需要服务器端软件支持。
目录
认识Git
当我们开发软件时,通常会有一个工作目录,这里是我们实际编写和修改代码的地方。每当完成了一部分新功能或者修复了一些问题,我们可以把改动暂存起来,这个暂存的地方叫做暂存区。这一步就像是为即将提交的变化做一个标记。
这些标记过的改动最终会被提交到本地仓库中。本地仓库实际上就是存储在你电脑上的一个版本控制系统,记录着项目每一次变更的历史。每次提交都像是给你的代码拍了一个快照,保存了当时的状态。
除了本地仓库外,我们还会用到远程仓库。远程仓库通常是位于服务器上的,团队成员可以通过网络将本地仓库中的更改推送到远程仓库,也可以从远程仓库拉取最新的代码到自己的本地仓库。这样一来,即使团队成员不在同一地点,也能协同工作,保持代码的一致性和最新状态。
通过这样的流程,每次完成一个小的功能点或者修复了一个bug,我们都可以将其提交并记录下来。这样做不仅方便跟踪项目的进展,还可以轻松地回滚到之前的任何状态,或者查看某个版本具体做了哪些改动。这种方式极大地提高了开发效率和代码管理的便捷性。
1.安装Git
安装完毕后需要先设定用户名及邮箱区分用户
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
2.基本命令介绍
2.1创建本地仓库
将任意一个文件夹作为一个本地仓库,进入之后右键选择Open Git Bash here进入命令窗口
创建本地仓库的命令如下:
输入:git init
输入后,会自动生成一个 .git 目录,注意这个目录是一个隐藏目录,而当前目录就是我们的工作目录。
查看当前状态的命令如下 :
输入:git status
如果已经成功配置为本地仓库,会出现以下状态,master为当前分支,暂无提交记录,此时仓库为空。
2.2添加和提交
如何用git进行版本控制呢,我们先在上一步创建的文件夹中创建一个文本文档,往里面写一些内容。
再次输入 :git status
发现刚刚新增的文本文件成了Untracked files状态,Untracked files是未追踪文件的意思,此时git不会记录它的变化,等于还没对他进行版本控制,将其当做一个新创建的文件,我们可以将其添加到暂存区,那么它会自动变为被追踪状态,添加到暂存区的命令如下:
输入:git add wyw.txt
或者: git add . //代表一次性添加目录下所有的文件。
然后再次输入 git status 查看当前状态,发现已经成了 to be committed , 此时代表添加到暂存区成功。
接下来就要提交到Git本地仓库了 , 在’ ‘中加入描述方便后续查看, 比如修改了什么或者新增了什么内容。
输入: git commit -m 'Initial Commit'
看到已经添加到本地仓库成功了
如何查看提交记录?
输入: git log
如果里面有多条记录的时候也可以用
git log --online #进行逐行查看,较为直观
修改之后也需要再次提交。当我们对我们的文档加入如下修改之后,再次git status 查看状态,由于文档已经被追踪了
显示有文件被修改但是还未commit
同样的,我们可以将其加入到暂存区,然后提交到本地仓库
git add xx.txt
git commit -m 'Modify first'
使用 git log 查看提交记录,看到已经成功提交,也能看到历史提交,head指向最新的状态
那我们如何查看提交的内容呢?
输入: git show +(commit 的唯一id,完整或者短一些的都可以)
就可以看到新增的修改内容了。
再次查看状态,此时都已成功添加了。
接下来我们看看如何使用.gitignore来完成文件忽略列表,新建一个aaa.text,和一个.gitignore,查看当前状态:这两个文件都没被追踪。
但是我们想要忽略aaa.text,不对其进行版本控制,我们可以在.gitignore里加入:
这样,aaa.text就不在git的控制之中了。
其他可以在.gitignore中编写的语句:
# 这样就会匹配所有以txt结尾的文件
*.txt
# 虽然上面排除了所有txt结尾的文件,但是这个不排除
!bbb.txt
# 也可以直接指定一个文件夹,文件夹下的所有文件将全部忽略
test/
# 目录中所有以txt结尾的文件,但不包括子目录
xxx/*.txt
# 目录中所有以txt结尾的文件,包括子目录
xxx/**/*.txt
完成.gitignore的提交
完成以上的操作,此时本地仓库的状态如下:
2.3回滚
当我们想要回退到过去的版本时,就可以执行回滚操作。
回滚前状态:
输入 :git reset --hard commitId # commit是唯一的标识
执行成功后的文件夹状态:可以看到已经回到了一开始的状态。
查看log日志也只有一条记录,证明我们已经正确回滚了。
那么又怎么取消回滚呢,假设我又想回去回滚前的版本,我们可以用git reflog来找到所有的commit,feflog中的内容不会因为回滚而消失,找到我们想要去到的回滚前的commitID,再使用一一次 git reset -- hard 就可以实现取消回滚:
输入 : git reflog 和 git reset --hard commitId
git reflog可以帮助我们找到所有的操作记录和commitId,我们直接再次reset就能搞定了。
额外的知识点:对于已经创建了,只是进行修改的文件,可以直接commit -a表示自动添加到暂存区
输入: git commit -a -m 'Modify second'
这样就省去了先add再commit的步骤,合二为一。
3.分支
分支是Git中用于开发和管理代码的重要概念之一。每个分支都是一个独立的代码版本,可以在分支上进行修改和提交,而不影响主线(通常是master
分支)上的开发工作。
因此,我们可以在一个主干上分出N个分支,分别对多个分支的代码进行维护。
3.1创建分支
查看当前仓库中存在的分支:
git branch
master是默认情况下的分支,我们之前一直使用的也是master分支,我们接着来基于当前分支创建一个新的分支:
输入: git branch test #创建分支
#删除分支 git branch -d test
对文件进行修改然后提交
查看log发现这时候,master实现了新的提交,而我们刚刚创建的test分支没有发生修改,还是之前提交的状态。现在 master和test是两个互不影响的分支了
3.2切换分支
切换分支的命令如下
输入: git checkout test #进行分支切换
切换成功了test分支,此时test分支里的wyw.txt是修改前的版本,与master分支里的版本不一样了。
接下来,我们对test分支进行修改,然后commit
使用 git log -all -graph --oneline #查看所有分支的记录
此时,这两个分支的同一个文件内容就不一样了,他们的内容是相互隔离的。
3.3合并分支
回到master分支,合并分支的命令如下:
输入 : git merge 分支名
进行合并,但此处会有报错,由于我们在两个分支都进行了同一个文件的修改,到底保留谁的修改呢,还是都保留?
查看冲突在哪的命令如下:
输入:git diff
也可以通过查看文件夹看到,
我们保留两个分支的修改
然后再次提交,输入以下命令:
git commit -a -m '描述'
git log --all --graph --oneline #查看记录
现在我们可以看到test 和master 已经合并了。注意,这里并不是直接合并,只是把test分支的内容同步到master分支上,是提交的内容合并到master,并不是分支的合并。
3.4变基分支
我们准备一个master分支和一个test分支,并且提交一个在master分支中的修改。此时日志如下。
然后我们去到test中进行一次修改,再查看log,此时两个分支都得到了修改。
如果我们想要test变基到master上,执行以下命令即可:
输入: git rebase master
如果没有冲突,则成功变基,查看log,与合并不同,现在test与master合并到了一条线,合并是分支回到主干的过程,而变基是直接修改分支开始的位置,比如我们希望将test变基到master上,那么test会将分支起点移动到master最后一次提交位置,变基后,test分支相当于同步了此前master分支的全部提交如下图所示:
3.5优选
现在我们有一个master2和一个master3分支,我们可以通过优选使得其将他分支上的提交作用于当前分支上,比起变基和合并有更大的灵活性,可以选择自己想要的分支。
我们想让master2分支作用于test分支,于是我们去到test分支中,输入以下命令:
git cherry-pick commitId #commitId是想要优选的唯一的id,此处放入master2的id
这样,就成功地完成了一次优选。
4.使用IDEA进行版本控制
如何在idea中进行版本控制呢,我们先加入我们当前项目的代码:
然后根据我们.gitignore文件中的内容,项目中的部分文件是不会被追踪的,呈现出不一样的颜色如下:
下面这个颜色属于未追踪状态。
idea右上角中间的按钮为commit提交:
然后完成初次提交
idea下方可以观察到提交状态:
继续添加一个文件并且commit:
可以看到控制台也是在执行git命令的。
如何创建分支呢?在下图的新建分支;右键分支可以选择切换分支。
在分支上继续修改,提交可以看到如下状态
5.远程仓库
我们已经在本地编写好了代码,如何把本地仓库推送到远程仓库?
5.1创建本地仓库
加入内容,同步到本地仓库
5.2推送到远程仓库
在此之前我们要有一个GitHub仓库或者码云等仓库,复制这里的https地址:
然后输入命令:
git remote add (仓库名) (http)地址
此处地址一定要写对,错误的地址也会直接执行而不会给我们报错。
然后输入:
git push 远程仓库名称 本地分支名称[:远端分支名称]
此时远端还没有分支,我们第一次使用可以不加上远端分支名称,远端会自动创建一个master分支 git push origin master
中间需要使用token登录。
成功推送了。
再次修改文件再提交,如下图所示,本地的master已经到了第二个版本,远程仓库还是第一个版本,然后就需要再次提交到远程仓库以保持版本一致,此处也不需要再次提交验证凭证了,git帮我们记住了我们提交的token。
每一次提交代码都要带上分支名字,会显得有点麻烦,我们可以将本地的分支与远程的分支绑定起来,绑定后就不需要指定分支名称了。命令如下:
git push --set-upstream origin master:master
git push origin
出现以下这样的远程仓库和本地仓库处于同一行的状态,就说明我们已经绑定成功。
5.3克隆项目
如果我们已经存在一个远程仓库的情况下,我们需要在远程仓库的代码上继续编写代码,这个时候怎么办呢?可以使用克隆操作来将远端仓库的内容全部复制到本地:
使用如下命令:
git clone + 项目地址 #克隆
5.4抓取和拉取
如果多人在同时开发一个远程仓库的时候,比如A完成了他的模块,A就提交代码并推送到远程仓库,B完成了他的模块,B也提交代码并推送到远程仓库,如果A先提交了,到B提交的时候,B的本地仓库中的内容和远程仓库就不一致了,这时候我们就需要用pull操作,获取远程仓库中最新的提交。
比如当我尝试push到远程仓库的时候,会报错本地仓库内容与远程仓库内容不一致。
我们可以用以下命令解决这样的冲突问题:
先输入:git fetch 远程仓库名称 #抓取:只获取但不合并远端分支,
然后手动合并:git merge 分支名 #手动合并才能提交
或者直接输入 : git pull 远程仓库 #拉取:获取+合并,等于上述二合一。
这样就可以完成同步,多人开发。
标签:git,入门,仓库,常见,Git,master,提交,test,分支 From: https://blog.csdn.net/wywcool/article/details/141223661