【笔记整理 - Git】

重装电脑时忘了备份Typora默认放在C盘的图片。

配置

系统配置

git config --system -l

用户配置

必须先创建用户名和密码后才会生成用户配置文件

git config --global -l

目前只能登记一个user信息,后续再执行登记用户名和邮箱的指令,是执行修改操作。

环境变量

配置环境变量只是为了能全局使用,即在电脑的任何位置使用git。

但右键->Git Bash Here已经能实现这功能了,所以配不配置无所谓。

Git基本理论

Workspace:工作区,平时放代码的文件夹。

Index/Stage:暂存区,临时存放改动。实际上也只是一个文件,保存即将提交到文件列表信息。

Repository:本地仓库。安全存放数据的位置,其中存有提交到所有版本的数据。

Remote:远程仓库,托管代码的服务器。GitHub或gitee这样的平台。

基本命令

工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文。

本地搭建

git init

会创建一个.git文件夹

克隆远程仓库

从网站获取https或ssh链接

git clone [url]

文件的4种状态

文件的四种状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

如果目录中存在中文,会使得目录名看起来非常复杂。

文件提交

#查看指定文件状态
git status [filename]

#查看所有文件状态
git status

# git add .                  添加所有文件到暂存区
# git commit -m "消息内容"    提交暂存区中的内容到本地仓库 -m 提交信息
如果在使用commit时没有加上"-m",就会进入vim编辑器。

必须先add,才能commit

直接commit的提示:

error: pathspec 'hi.txt' did not match any file(s) known to git

使用git add hello.txt

将“hello.txt”改为“hello there.txt”,git不会追踪文件名修改,会将其视为文件“hello.txt”已被删除。

如果将文件名改回,或让任意一个文件命名为“hello.txt”,则git将其识别(下图)。

提交时忽略文件

建立.gitignore文件

!补充从linux虚拟机提交到github

直接用http连接上传不了,用ssh先clone,再push,成功。但先要配置ssh密钥。

ssh配置

1、生成密钥

可以设置属性,具体内容需要时再查,直接3次回车就行。

ssh-keygen

2、将SSH key 添加到 ssh-agent

ssh-add ~/.ssh/id_rsa

如果出现“Could not open a connection to your authentication agent.”的错误可以先输入以下指令,

eval "$(ssh-agent -s)"

然后再执行一次ssh-add

3、将SSH key 添加到GitHub账户

github中:“Settings”–>“SSH and GPG keys”–>“New SSH key”,

cat /root/.ssh/id_rsa.pub

将文件内容完全复制过去,注意一下格式。

4、验证key

ssh -T gitcpplinue@github.com

这一步失败了,但不影响使用远程库。

然后就能通过ssh链接从远程库获取代码了

git clone git@github.com:gitcpplinue/socket_practice.git

Git常用指令

另开一版,记录可能会常用到的git指令。

更多指令参考官方文档:https://git-scm.com/docs 并自己实践。

git init

初始化

出现.git文件夹就算成功了。

git config

git config --global user.name "……"
git config --global user.email "……"

git add

init后的文件夹内的新文件用git status查看会以红字显示

git add [文件名]

追踪该文件


git add .

追踪工作区(.git文件夹所在位置)内所有文件

git commit

将索引区的文件提交到本地库。

git commit [文件名] -m "注释信息"

如果没有-m "注释信息",则会进入vim编辑器。总之,commit指令必须要有注释。

[文件名]-m 可以互换


git commit -m "注释信息"

提交索引区内的所有文件。

git diff

git diff HEAD [文件名]

对比工作区文件与本地库文件。

HEAD为索引号,可用git log查看。


git diff [文件名]

对比工作区文件和暂存区文件。

如果没有文件名,则对比所有文件。


对于文件的修改,git以行为单位,从上到下严格按顺序记录,一切修改都视为对行的增、删。

内容:“123” ——> “1234”		视为“减1行,增1行”
	  abc		abc
	  
内容:“123” ——> “abc”		视为“减2行,增2行”
	  abc		123

git log

查看提交历史

git log

git log --pretty=oneline

相对于默认log显示更精简。


git log oneline

在上一代码基础上,索引号只显示前7位。


git reflog

会显示历史提交步数:HEAD@{}

bc66901 (HEAD -> master) HEAD@{0}: commit (merge): merge
025e682 HEAD@{1}: commit: Edit content of file in MASTER
eccad07 HEAD@{2}: checkout: moving from branch0 to master
ef1645a (branch0) HEAD@{3}: commit: Only 1 left int BRANCH0
91aff97 HEAD@{4}: checkout: moving from master to branch0
eccad07 HEAD@{5}: commit: Only 1 left int MASTER
c908d4a HEAD@{6}: merge branch0: Merge made by the 'recursive' strategy.

按q可退出日志。

!!删除文件

还是 add、commit

实践:将一些文件移入一个新目录后,直接git add .commit,只会本地库只会响应“新增”的操作,即对于工作区来说是文件剪切,而对于本地库来说是复制粘贴。push后的远程库与本地库同理,仍保留本应删除的原文件。

在本地/远程库中实现剪切的解决方法:使用git status查看细节,能看到提示,使用git rm 文件名将工作区的删除操作映射到暂存区,然后commit映射到本地库,最后push即可。

git reset

git reset --hard 索引号
参数 --soft	仅切换本地库版本
	--mix	 切换暂存区、本地库
	--hard	  工作区、暂存区、本地库全部切换到该版本

git reset --hard HEAD~1

切换到上1个版本


git reset --hard HEAD

切换到当前版本。用途:在工作区、暂存区删除了文件但未commit,可用这方法找回文件。


索引号可通过git log查看。当前所在的版本会用 (HEAD -> master) 的方式标记。

使用reset切换版本后,这一动作也会作为历史版本记录。经过多次切换,用git reflog会看到很多索引号相同的版本记录。

git branch

git branch 分支名

创建一个新分支


git branch -v

查看已有分支


git checkout 分支名

切换分支


自己实践的一些总结

  1. 切换分支后,工作区文件也会被更改,但仅限于那些被追踪的文件。未被追踪的“无主文件”对所有分支可见。
  2. 不同分支共享暂存区!?add文件后,在2个分支内用git status检查,该文件都为绿色标记。在任一分支中commit后,该文件就属于该分支了。
  3. reset可以在分支间切换版本!即:可以直接将其他分支的历史版本拿来用。
  4. 使用git log只会查看本分支的历史提交信息;使用git reflog会查看所有分支的历史提交信息。

git merge

git merge 分支名

同名文件内容不同时会有冲突。

冲突的内容会以

<<<<<<< HEAD
asdasd
=======
123123
>>>>>>> master

的形式呈现,且当前所在分支会成为 (branch0|MERGING):在branch0分支内执行merge操作遇到冲突。

解决方法:

手动修改文件内容,然后再add、commit。

在冲突状态下,不能commit特定文件,只能直接git commit -m “……”

其实不做任何修改,直接add、commit也可以。但文件内容仍会保留冲突部分标记,对于实际工作来说是没意义的。

远程库相关操作

git remote

git remote -v

查看已有的远程库信息


git remote add 别名 https链接

git并不会去验证这个链接,瞎几把填都可以。

git push

将本地库内容提交到远程库

git push 别名/链接 本地库分支名

之后就会要求输入GitHub用户名、密码

git clone

从远程服务器克隆整个版本库到本地,似乎包括所有的历史版本、分支、日志。

git clone 链接

如果使用的是链接,且没有事先创建别名,则会自动取一个。

git fetch

git fetch origin master

将远程库master分支下载到本地


git checkout origin/master

切换到已下载到本地的远程库

之后可用

ll

查看文件内容,如果没问题,

git merge origin/master

git pull

只下载master版本

pull = fetch + merge

远程库的冲突解决

push,因为文件冲突,失败。则pull,修改冲突文件,再push

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值