一、Git安装
前往Git官网选择自己操作系统对应的版本
这里Setup表示是安装版本的,双击进行安装,完成后右键有git bash。
Portable表示是解压版本的,无需安装解压即用,右键没有git bash。
接下来傻瓜式安装即可。
二、基本配置
在电脑桌面右键,点击Git Bash Here,会打开一个窗口,里面可以运行Linux命令,我们可以在这配置基本信息。
1. 设置用户信息
输入这两行命令并回车以设置你的用户名和邮箱(该邮箱不要求必须真实存在)用来记录用户对代码的操作情况,这样做的目的是为了方便了解谁在什么时候对代码做了什么操作。
git config --global user.email "11111@123.com"
git config --global user.name "tyuhu2"
你也可以通过以下命令查看邮箱和用户名
git config --global user.email
git config --global user.name
2. 解决Git中文乱码问题
在使用Git时对中文文件名的显示会出现乱码,需要通过设置解决。
- 在Git Bash里运行以下指令:
git config --global core.quotepath false
- 右键单击Bash空白处,找到Options
找到Text,把Locale设置为zh_CN,Character set设置为UTF-8。一般这时就已经可以显示中文了,如果还是乱码,建议重装git。
三、Git操作
1. Git操作中的文件状态
如果我们在工作目录下新建了一个文件,但Git此时并不认为该文件归Git管理,此时该文件的状态就是untracked(未跟踪)。同样的,如果是修改仓库里的文件,此时该文件的状态就是unstaged(未暂存),和untracked一样,它们都处于工作区。
暂存区是提交到本地仓库前的一个缓冲区。如果要把工作区的内容提交到暂存区,只需要用git add指令来提交即可。
这里的仓库就是指本地仓库,将文件从暂存区提交到本地仓库需要使用git commit指令。
如果我们想要查看文件状态,可以在工作目录的Git Bash里使用指令git status。
2. 新建本地仓库
在项目文件夹右键打开Git Bash Here,输入git init指令回车,就会发现在文件夹下出现了一个.git文件夹,这就说明本地仓库建立完成。
3. git add添加到暂存区
前面提到过,git add指令用于将文件从工作区提交到暂存区,我们可以用"git add 文件名"的形式提交。
此时再查看文件状态,会发现1,txt已经提交成功。
这种文件名提交的方式每次只能提交一个文件,如果要提交多个文件,我们可以用"git add ."来一次性提交所有工作区的文件。
4. git commit提交到本地仓库
利用git commit提交暂存区的内容到本地仓库,-m后面跟的是注释,自己添加。
git commit -m "注释"
提交完成后,如果想要查看提交的历史记录可以用git log指令。
5. 修改文件
如果我们对已经提交到仓库的文件进行了修改,Git会感知到内容有变化,此时用git status查看就会发现此时被修改的文件会提示modified(被修改),此时的该文件就是处于工作区,如果要再次提交,只需要再用git add和git commit就行了。
6. 版本回退与切换
比如我有一个文档,第一次提交的时候里面什么都没有,第二次提交的时候里面写了一个1,如果我想要让这个文档回到什么都没有的状态,我们只需要把文件还原到第一次提交的状态即可。该操作可以通过命令 git reset --hard commitID实现,其中commitID可以通过git log查看,如下图
(tips: 在Git Bash复制文本时,只需要选中需要复制的文本即可,不需要右键点Copy)
需要注意的是,使用版本回退后也会清除git log中后续的提交记录,比如刚开始我做了两次提交,一次是"版本 v1.0",第二次时"版本v1.0.1",此时我回退到了v1.0版本,此时再用git log查看,
发现版本v1.0.1的提交记录不在了,而想要版本切换时又需要commitID,此时我们可以通过git reflog命令查看变化情况
可以看出,当前CommitID为c816151,第二次提交的ID为2945fc0,再使用git reset命令切换到最新版也是能成功切换的
总之,使用reset回退版本适用于丢弃掉新版本而使用旧版本的情况,如果想再回到新版本,需要知道CommieID,但是如果回退的时间比较长,提交的次数又比较多的话,找这个ID还是挺麻烦的。
7. .gitignore文件
在项目中,总是会存在一些文件,我们并不希望提交到仓库,因为这些文件并不是项目的核心文件没啥用,比如pycache文件夹。这时,我们可以通过创建.gitignore文件,并在里面添加上想要git忽略掉的文件即可,这样Git就会自动"无视"这些文件。
一般这些需要git忽略的文件格式和文件目录都是固定的,我们可以直接Copy过来用,这是github上别人总结的gitignore模板,可以直接拿过来用,也可以根据自己的需要加以修改。
8. 分支
创建与切换分支
分支的作用在于把开发和产品分离开,我们可以创建两条分支,一条develop(开发)分支,一条master(产品)分支,我们在开发的时候在develop分支进行,在对产品更新的时候把开发分支的内容合并到产品分支上。
查看分支:git branch
创建分支:git branch 分支名
切换分支:git checkout 分支名
创建并切换分支:git checkout -b 分支名
重命名分支:git branch -m 旧分支名 新分支名
删除已合并过的分支:git branch -d 分支名
删除未合并过的分支:git branch -D 分支名
在创建仓库的时候,也可以同时把分支创建了,指令是git init -b 分支名,而我们如果创建仓库的时候没有创建分支,在提交代码时git则会创建一个名为master的默认分支。
举个例子,比如我现在有一个a分支,然后创建了1个a.txt文件并提交到本地仓库,然后再创建1个b分支,此时b分支由于是在已有a分支的情况下创建的,所以它继承了a分支的所有内容,用git log查看发现两个分支的提交内容记录是一样的。但是如果现在切换到b分支,再创建1个2.txt文件并提交到b分支的本地仓库里,此时在切换回a分支会发现a分支的目录里和提交记录里都是找不到2.txt文件的,分支之间相互独立。
合并分支
合并分支的指令是git merge 分支名
合并分支是把另一个分支的内容合并到当前分支,比如我在a分支创建了一个a.txt,然后创建b分支,此时b分支也有a.txt,此时回到a分支,再创建b.txt文件,此时a分支是比b分支"新"的,此时我们回到b分支,输入指令git merge a即可把a分支合并到b分支,此时b分支便会出现b.txt文件。
在开发过程中,轻易不要动产品分支,否则可能会给他人的合并带来冲突!!!
9. 冲突
远程仓库冲突
在多人协作开发的时候,我们需要一个第三方平台(如github或公司自己的远程仓库)管理代码,比如员工a和员工b同时开发一个项目,为了实现两个员工的代码同步,就需要二者都把代码提交到云端。当然,除了向远程仓库推送,自己本地仓库的多个分支合并也可能会出现冲突。
如果员工a仓库里有1文件和2文件,员工b仓库有1,2,3文件,此时员工b把写好的代码提交远程仓库,此时是没问题的,而此时远程仓库有1,2,3文件,a员工仓库只有1,2文件,也就是此时远程仓库的版本是比a员工的仓库版本新的,如果a员工此时写好了1个4文件并推送到远程仓库,仓库会拒绝a员工的推送,这就是冲突的产生。
而要解决冲突也很简单,a员工只需要使用git pull命令把远程仓库的文件同步过来,然后a员工就有了1,2,3,4一共4个文件,此时就可以再次提交了。总之就是员工开发的代码版本必须高于远程仓库的代码版本,否则会发生冲突。
本地分支冲突
我现在有一个a分支,一个b分支,两个分支都有1个1.txt文件并都已提交到本地仓库,a分支的该文件内容是123,b分支是456,此时我在a分支合并两分支就会提示冲突,此时打开a分支中1.txt文件会如下图所示
我们只需要保留需要保留的部分(123)即可,然后重新git add 和git commit并正常合并。
四、Gitee远程仓库
1. 创建仓库
首先注册账号并登录,然后新建一个仓库
点击创建即可完成。
2. 配置公钥
要想向创建的仓库推送代码,需要被验证你是否有权限向该仓库推送。方式1就是使用账号密码,但这种方式过于繁琐不推荐,方式2是使用公钥。
先来生成密钥,在Git Bash窗口里输入命令
ssh-keygen -t rsa
回车执行,然后一直按回车,直到出现下图中的RSA密钥
查看密钥可以使用下面指令
cat ~/.ssh/id_rsa.pub
然后把密钥复制一下,打开gitee设置里的SSH公钥复制到公钥里面,标题会自动生成,自己写也可以。
此时公钥配置完成,输入以下指令验证是否配置成功
ssh -T git@gitee.com
回车后显示提示信息,然后输入yes再次回车就可以看到成功登陆提示了。
3. 添加远程仓库
首先要添加远程仓库的地址用于将本地仓库和远程仓库绑定,使用以下指令
git remote add origin 远程仓库地址
其中远程仓库地址可以从仓库页面拿到,选择SSH,里面的链接就是地址。
如果你选择HTTPS,那么推送代码的时候是需要账号密码的,配置的公钥起不到作用。
origin代表远程仓库的别名,这个是约定俗成的,通常不改动。
此时我们可以使用git remote指令查看我们的远程仓库
删除远程仓库的指令未:
git remote rm 仓库名(origin)
4.推送到远程仓库
使用以下指令,意思是说把本地仓库的master分支推送到远程仓库origin
git push origin master
这样就说明推送成功了,此时返回gitee刷新页面就可以看到代码文件了。
5. 从远程仓库克隆
如果想把远程仓库的项目下载到本地,可以使用以下指令
git clone 仓库地址(SSH) 文件夹名(可选)
好了,现在你的本地已经有远程仓库的项目了。如果此时另一位员工又向远程仓库提交了一个c.txt文件,那么此时我们的本地仓库版本又不是最新了,那么我们可以使用git fetch origin [分支名],如果不加分支则表示更新所有分支。更新之后,我们往往还需要使用git merge对更新的文件进行合并。
git fetch之后往往需要merge,而为了合并这两步,可以使用git pull origin <远程分支名>:<本地分支名>,如果不加本地分支名表示拉取并合并到当前分支。