Git个人笔记

250 阅读8分钟

直接步入正题:

我们在首次创建远程仓库,提交代码的时候一般有如下步骤:
git init 
git add .
git commit -m 'xxx'
git remote add origin https://xxx
git push --set-upstream origin master

2.png

注意下方提到的的hello.txt只是一个例子文件,实际情况根据自己而定

●●●●●凭据管理器

●●●●●git init

●●●●●git add hello.txt

●●●●●git commit -m 'first commit' hello.txt

first commit指的是版本号

●●●●●git status

●●●●●git clone https://xxxx

●●●●●

git config --global user.email "github的邮箱"

git config --global user.name "github的用户名"

配置提交者的账号和用户名称

●●●●●git fetch http:// xxx

一旦远程主机的版本库有了更新,需要将这些更新取回本地,这时就要用到git fetch命令。将某个远程主机的更新,全部取回本地
    

●●●●●git rm --cache hello.txt

撤销(删除)暂存区里的文件

●●●●●git rm -f hello.txt

撤销(删除)暂存区和工作区(本地文件)里的文件

●●●●●git reset(删除错误提交的commit)

git reset有三个选项,--hard--mixed--soft
git reset --soft 版本库ID
	仅仅只是撤销已提交的版本库,不会修改暂存区和工作区
git reset --mixed 版本库ID
	仅仅只是撤销已提交的版本库和暂存区,不会修改工作区
git reset --hard 版本库ID
	彻底将工作区、暂存区和版本库记录恢复到指定的版本库
那我们到底应该用哪个选项好呢?
    (1)如果你是在提交了后,对工作区的代码做了修改,并且想保留这些修改,那么可以使用git reset --mixed 版本库ID,注意这个版本库ID应该不是你刚刚提交的版本库ID,而是刚刚提交版本库的上一个版本库。如下图:
    (2)如果不想保留这些修改,可以直接使用彻底的恢复命令,git reset --hard 版本库ID。
    (3)为什么不使用--soft呢,因为它只是恢复了版本库,暂存区仍然存在你错误提交的文件索引,还需要进一步使用上一节的删除错误添加到暂存区的文件

●●●●●git rm hello.txt

删除文件

●●●●●git rm git rm -r 目录名/

删除指定目录以及目录下的所有文件和子目录

●●●●●git diff

查看对比文件修改前和修改后的变化

●●●●●git reflog

查看精简版本号、作者、信息
    

●●●●●git log

查看详细版本号、作者、信息

●●●●●git reset --hard 版本号(这里写精简版本号就可以)

●●●●●cat hello.txt

查看hello.txt文件内容
    

●●●●●vim hello.txt

创建hello.txt文件
步骤:
	 (1i 键(开始输入内容)
	 (2)编辑完成Esc键退出编辑模式转换到一般模式,然后:wq推出编辑并保存(其他命令参考文档)

●●●●●ll(注意这是两个小写字母l,不是数字1)

查看当前目录下文件信息
    

●●●●●git branch -a

查看当前有那些分支

●●●●●git branch 分支名

创建分支
例如:git branch class1
    

●●●●●git checkout 分支名

切换分支
    

●●●●●git branch -v

查看分支信息

●●●●●查看当前使用的版本号

.git/refs/heads/分支名

例如:.git/refs/heads/master或者.git/refs/heads/class1

●●●●●git merge 分支名

例如:现在在master分支上使用git merge class1可以将class1分支以master分支为基准合并到一起

★★合并冲突

原因:例如在master分支对hello.txt文件修改了一部分内容,并且addcommit完成之后,又在class1分支上对同一个文件hello.txt文件进行了修改并且addcommit完成,此时合并就会造成冲突(造成冲突时后面小括号会显示(master|MERGING)就是正在合并中)
解决方法步骤:
	 (1)vim hello.txt进入文件把不需要的删除(包括类似<<<=====>>>>特殊符号)
	 (2)git add hello.txt
	 (3)git commit -m '合并测试'(——注意这里提交的时候不要添加文件名)
此时合并成功,并且后面小括号内容恢复正常
注意:合并分支只会修改(这里是master)的内容,并不会修改(这里是calss1)的内容

●●●●●git remote -v(remote翻译过来是遥远的,在这里指远程仓库的地址)

查看别名(别名就是链接比较长,使用别名简写链接,创建好之后查看别名会出现fetch和push两个,表示fetch和push都可以用着别名)

●●●●●git remote add 别名 链接

创建别名

●●●●●git push 别名/链接 分支名

推送到远程仓库
	例如:git push gitTest master

●●●●●git pull 别名 分支名

拉取远程仓库
    

●●●●●注意:如果远程仓库代码和自己的代码不一致时,先pull远程仓库代码,保证自己代码是最新版本再修改

●●●●●远程仓库

1)复制/克隆http版的链接
 (2)git remote add 别名 链接
 (3)git push 别名/链接 分支名

●●●●●fork远程仓库

1)git clone 链接(注意clone完之后会自动创建别名(此时别名为origin))
 (2)修改完之后需要add和commit然后再push
        注意:如果使用的是同一个电脑,需要把凭据管理器中的账号信息删除,如果远程仓库没有设置clone权限,那么就不需要登录帐号了

        注意:
             (1)使用push推送时选择好分支
             (2)当报错“拒绝合并不想管历史记录”时可以使用git pull gitTest master --allow-unrelated-histories先拉取,
              理解:--allow-unrelated-histories
              远程仓库和本地的没有一个共同的 commit 所以 git 不让提交,认为是写错了 origin ,如果开发者确定是这个 origin 就可以使用 --allow-unrelated-histories 告诉 git 自己确定
             (3)当B账号push没有权限的时候,需要A账号在远程仓库中
                  —>找到setting
                  —>找到管理账号
                  —>下面邀请成员(输入B账号)
                  —>会出现一个邀请函(复制发送该链接给B)
                  —>然后B在自己远程仓库打开该链接(点击同意)
                  —>此时获得权限后就可以在远程仓库看到A账号代码了(此时就可以推送了,并且两人都可以看到代码)
                  —>此时B就可以git pull 别名/链接 master拉取代码(也可以看到修改后的代码了)
             (4A修改完之后也可以通过Pull Request方法发送给B,然后B在Pull Request中就可以看到请求,并且可以在下面回复信息聊天,如果代码可以,就点击合并代码

●●●●●SSH

ssh作用:此windows连接该账号就不需要重复输入密码了(如果没有设置ssh密钥,远程仓库中的SSH会弹出警告框)
步骤:
1.C盘—>用户/asus—>运行git
2.ssh-keygen -t rsa -C 描述内容
	-t	指定加密算法生成方式
	rsa	著名非对称加密协议
	-C	描述
3.一路回车,然后会生成 id_rsa(公钥) 和 id_rsa.pub(私钥) 两个文件夹
4.复制公钥的全部内容粘贴到远程仓库中的SSH公钥/SSH keys
5.此时cd到指定目录然后也可以通过SSH链接进行pull和push了

问题:每次进行git操作(如clone pull等)都需要ssh/id_rsa 输入密码

解决方案:执行如下命令

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

效果如下图:

image.png

●●●●●忽略文件

步骤:
1.C盘—>用户/asus—>创建xxxx.ignore文件(在里面指定不需要上传的文件)
        —>并且在.gitconfig文件中引用
	引用方式:
		[core]
			excludesfile = C:/Users/asus/xxxx.ignore(具体参考文档,根据自己情况设置,注意:要使用正斜线/,不要使用反斜线\)
2.在编辑器中定位git程序(设置—>版本控制—>git—>目录设置(git/bin/git.exe)—>这里视频使用的idea还可以点击test测试一下,显示出git版本号表示编辑器idea定位到了git程序,其他编辑器不确定有没有test测试按钮)
3.完成步骤一(设置忽略文件)和步骤二(定位git程序)此时编辑器就可以使用git了,这是准备环境。
4.设置VCS(版本控制工具)
        —>Import into Version Control(导入到版本控制中)
        —>Create Git Repository(创建Git存储库)
        —>选中git目录点击确认
        —>查看图形化界面项目目录中出现 .git 文件表示设置成功
        (git中红色文件表示未追踪,没有添加到暂存区中)

●●●●●解决红绿色图标不显示问题

步骤:
	1.首先需要有tortoiseGit插件
	2.命令窗运行regedit.exe
	3.HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer
	4.Max Cached Icons 数据2000(没有就创建)
        5.HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers
	6.将所有TortoiseGit...文件前面加空格保持在文件ShellIconOverlayIdentifiers的最前面(空格越多越靠前)
	7.重启电脑才会生效

●●●●●如果使用编辑器登录github账号多次失败情况,可以使用token口令登录,口令可以在远程仓库设置中生成(生成口令时可选权限,注意:口令生成之后刷新页面就没了,是找不到的,如果需要只能再生成一个口令

●●●●●如果在编辑器内使用pull push 等功能时需要切换好分支

●●●●●github由于网络原因下载不下来,可以使用gitee把github代码复制一份

步骤:进入gitee新建仓库,什么都不需要点,直接点击导入已有仓库,复制github克隆https链接,然后粘贴直接创建
(如果github版本更新了,可以点击gitee中项目名称后面的一个刷新图标,就可以同步最新版本了)

●●●●●创建一个.gitignore文件,里面指定要忽略的文件类型,然后这些文件就不会被跟踪

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules/
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea/*
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?