文章目录
前言
- Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目。
- Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。
- Git与常用的版本控制工具CVS、Subversion等不同,它采用了分布式版本库的方式,不用服务器端软件支持,各个客户端都有一个最新版本信息,当服务器故障了,各个客户端都不会受到影响。# 一、pandas是什么?
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
一、初始化
设置用户名
git config --global user.name "Yaepii Jia"
设置邮箱
git config --global user.email [email protected]
保存用户名和密码
git config --global credential.helper store
查看配置信息
git config -l
–global关键字:全局配置,所有仓库生效
–system关键字:系统配置,对所有用户生效
二、新建仓库
仓库就是用来存放和管理代码的一个容器,新建仓库就是把一个电脑中的文件夹目录变成git可以管理的仓库就可以了。
方式一:在电脑本地创建一个仓库
git init [仓库名]
下图中的.git文件记录了仓库的信息,这是一个隐藏文件夹,需要用ls -a命令才能显示,进入到这个目录,可以使用ls -altr命令显示详细信息,当删除.git文件夹,仓库也会被删除。
方式二:从远程克隆一个已经存在的仓库
git clone <仓库地址>
三、工作区域和文件状态
工作区域分为:
- 工作区:本地文件夹目录,实际操作的目录
- 暂存区:保存即将提交到git上的修改内容
- 本地仓库:存储代码和版本信息
工作流程一般是:将工作区的文件先添加到暂存区,然后通过提交命令一次性提交到本地仓库。
文件状态:
四、添加和提交文件
查看当前仓库的状态:
git status
将文件添加到暂存区,等待提交:
gitadd<文件名>gitadd.#将所有文件添加到暂存区
取消暂存(从版本库和暂存区中删除文件,但不在工作区删除文件):
gitrm --cached <file_name>
将文件提交到仓库中:
git commit -m "提交信息"
查看提交记录:
git log
git log --oneline #查看简洁版提交信息
五、回退到之前版本
命令:git reset --param <版本id>
三个参数:
- soft:保留工作区和暂存区所有内容
- hard:删除工作区和暂存区所有内容
- mixed:默认,删除暂存区内容,保存工作区内容
git reset HEAD^ ##HEAD表示版本的指针,指向当前版本,^表示上一版本
查看操作的历史记录,可以回退到之前某个版本号:
git reflog
六、查看文件差异
查看文件在(不同区域、不同版本、不同分支)之间的差异,用得不多,因为以后开发主要是在图形化工具中使用git。
gitdiff#比较工作区和暂存区文件的差异(默认)gitdiff HEAD #比较工作区和版本库文件的差异gitdiff --cached #比较暂存区和版本库文件的差异gitdiff<版本1的ID><版本2的ID>[file_name]#比较两个版本文件的差异gitdiff HEAD~n HEAD [file_name]#比较当前版本和上n个版本文件的差异
七、从版本库中删除文件
使用这个命令,会将文件从工作区和暂存区同时删除,然后需要再提交一下,更新版本库中内容
gitrm<file_name>
如果想只在暂存区删除一个文件,而工作区不删除,可以加上–cached参数
gitrm --cached <file_name>
八、.gitignore忽略文件
在.gitignore文件中添加一些文件或文件夹(比如:日志文件.log、编译中间文件、临时文件等),可以使得在提交时,将.gitignore中的文件被忽略,不提交。
但是当前.gitignore中的文件不能是已经被添加到版本库中的文件,当这些文件发生修改时,git还是会检测到其内容的修改。
匹配规则:从上到下逐行匹配,每一行表示一个忽略模式,官网匹配规则
提示:github上提供了常用语言的忽略文件模板。
九、github远程仓库–SSH配置和克隆仓库
在本地创建一个ssh秘钥:
ssh-keygen -t rsa -C "[email protected]" -b 4096
- -t 指定密钥类型,默认是 rsa ,可以省略。
- -C 设置注释文字,比如邮箱。
- -f 指定密钥文件存储文件名,一般默认,让存储到默认路径以及默认文件名
- -b指定密钥的大小,默认也可以
它会要求输入Enter file in which to save the key (/home/stephenzhou/.ssh/id_rsa)
这里是要求输入秘钥的文件名,我们可以回车使用默认文件名,但当之前已经创建过秘钥文件,应该再自己设置一个,最好不要用默认。
然后会要求你输入密码,这个密码是在提交时输入的,和登录密码不一样,输入完成后会产生两个文件:id_rsa是私匙,id_rsa.pub是公匙,id_rsa不能告诉任何人,只有公钥可以,ssh采用的是非对称加密。
然后再github中,点击个人头像,选择settings,添加ssh公钥,将pub文件的内容复制进来,然后自定义一个名字,点击添加,输入登录密码后就完成了添加。
然后在本地端使用git clone命令就可以拷贝某一个项目到本地文件夹下(不需要git init初始化仓库,直接在一个普通文件夹下git clone即可)
git clone [email protected]:xxxxx.git
本地仓库和远程仓库是两个地方,在本地仓库进行修改后,远程仓库不会同步修改内容,需要一种机制将它们之间关联起来,这里用到两个命令:git pull(拉取:将远程仓库的修改同步到本地)git push(推送:将本地仓库的修改同步到远程仓库)
cd remote-repo_name
vim hello.txt
gitadd.git commit -m "first commit"git push
十、关联本地仓库与远程仓库
一般来说当我们在本地仓库写完本地仓库后,在github上创建了一个空的仓库,用以下命令,将他们关联起来:
git remote add<remote_name><url>
remote_name:远程仓库的别名,一般填origin
url:远程仓库的git链接
当从github上clone下来一个仓库后,就不用上面这行代码了,git自动建立了本地仓库和远程仓库的链接。
查看当前仓库对应的远程仓库的别名和地址:
git remote -v
指定分支的名称为main:
git branch -M main
将本地仓库的main分支和远程仓库的main分支关联起来(本地仓库提交了文件之后,push提交才能在github上显示出来):
git push -u origin main
-u:将本地仓库分支与远程仓库分支一起合并
从远程仓库拉取修改内容:
git pull <romote_name><romote_branch>:<local_branch>
删除远程仓库:
git remote rm<remote_name>
十一、分支
分支类似于版本库中的不同版本,可以独立存在和提交,分支可以使得一个项目的各个模块实现独立开发与测试,提高了整体项目的工作效率。
查看当前仓库的所有分支:
git branch
创建一个新的分支:
git branch <branch_name>
切换分支:
git checkout <branch_name>
但是使用这个命令切换分支可能会存在一些问题:因为checkout不仅可以切换分支,还有恢复文件的功能,当分支名和文件名相同时,就会出现歧义,默认会切换分支。
语义明确的切换分支:
git switch <branch_name>
切换回main分支,使用ls命令发现,没有dev.txt类型的文件夹,这是因为在dev分支进行了修改还没有合并到main分支中。
将不同的分支合并到当前的分支中,当前分支为目标分支:
git merge <被合并的分支名>
合并后会自动进行一次提交,Windows下会使用默认的提交信息,使用以下命令可以修改提交信息,也可以在执行命令时加上-m参数:
git commit --amend
在命令行中查看分支图:
git log --graph --oneline --decorate --all
删除已完成合并的分支:
git branch -d <branch_name>
如果这个分支没有被合并,需要用-D参数进行强制删除:
git branch -D <branch_name>
十二、解决合并冲突
如果两个分支修改了同一个文件的同一行代码,就会发生合并冲突。
创建feat分支,并在feat分支下对main1.txt文件进行修改,然后提交:
git branch feat
git switch feat
vim main1.txt
git commit -am "feat:1"#加上-a参数可以同时完成暂存和提交两个动作
返回main分支,然后在main分支下对main1.txt文件进行修改,然后提交:
git switch main
vim main1.txt
git commit -am "feat:1"#加上-a参数可以同时完成暂存和提交两个动作
合并两个分支,提示自动合并失败:
git merge <被合并的分支名>
可以使用git status查看冲突:
这时就需要手动修改文件内容,解决冲突,也可以使用以下命令终止合并:
vim main1.txt
git commit =am "merge conflict"#修改后再次提交git merge --abort #终止合并
回退和rebase
rebase中文意思是“变基”,也是用来整合分支的,可以在任意分支上使用rabase命令整合分支,整合完都是一条直线,但顺序会有所不同:
- 如果在dev分支上使用rebase命令,dev分支的提交会整合到main分支后面
- 如果在main分支上使用rebase命令,main分支的提交会整合到dev分支后面
恢复已合并的分支:
git checkout -b <branch_name><branch_id>
切换到dev分支,执行命令进行rebase合并:
git switch dev
git rebase main
切换到main分支,执行命令进行rebase合并:
git switch main
git rebase dev
Merge合并:
- 优点:不会破坏原分支的提交历史,方便回溯和查看
- 缺点:会产生额外的提交节点,分支图比较复杂
Rebase合并:
- 优点:不会新增额外的提交记录,形成线性历史,比较直观和干净
- 缺点:会改变提交历史,改变了当前分支branch out的节点,避免在共享分支中使用。
其他命令
1.打标签
给当前的提交打上标签,通常用于版本发布:
git tag <tag_name>
2.储藏当前工作现场
在开发过程中,在一个分支开发新的功能,还没开发完毕,做到一半时有反馈需要处理紧急bug,但是新功能开发了一半又不想提交,这时就用到了stash命令,储藏当前工作现场:
git stash save “message”将当前工作现场存储到堆栈中git stash list查看所有stashgit stash pop恢复最近一次stash,并在list中删除这次stashgit stash pop stash@{n}恢复指定的stash,stash@{0}表示最近的stashgit stash apply n恢复指定的stash,但不会再list中删除git stash drop stash@{n}在list中删除指定的stashgit stash clear删除所有stash
3.git pull 和 git fetch
- git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。
- git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。
git fetch用法:
git fetch <romote_name>#将某个远程仓库的更新全部取回本地git fetch <romote_name><branch_name>#将某个远程仓库的某个分支更新取回本地
git pull用法等于:
git fetch <romote_name><branch_name>#将某个远程仓库的某个分支更新取回本地git merge FETCH_HEAD #将拉取下来的最新内容合并到当前所在的分支中
git pull用法:
git pull <romote_name <remote_branch_name>:<local_branch_name>
一般工作流程:
git fetch #代码拉取到本地之后git branch #查看分支git switch <remote_branch_name>#切换到远程分支
注意
git add.时出现警告:LF will be replaced by CRLF the next time Git touches it
CR为回车符, LF为换行符。Windows结束一行用CRLF, Mac和Linux用LF。
与core.autocrlf参数有关:
false表示取消自动转换功能。适合纯Windows
true表示提交代码时把CRLF转换成LF,签出时LF转换成CRLF。适合多平台协作
input表示提交时把CRLF转换成LF,检出时不转换。适合纯Linux或Mac
Windows平台下默认设置为true,警告不用管它,这是合理的;Linux平台下把这个参数设置为input即可。
设置方法:
git config --global core.autocrlf false/true/input
总结
推荐这个B站教程,满满干货,视频制作精简且高质量,UP声音好听,没有废话!!!
版权归原作者 K.Fire好好睡觉 所有, 如有侵权,请联系我们删除。