示例: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 status
git add <文件名>
git add . #将所有文件添加到暂存区
取消暂存(从版本库和暂存区中删除文件,但不在工作区删除文件):
git rm --cached <file_name>
将文件提交到仓库中:
git commit -m "提交信息"
git log
git log --oneline #查看简洁版提交信息
命令:git reset --param <版本id>
三个参数:
git reset HEAD^ ##HEAD表示版本的指针,指向当前版本,^表示上一版本
git reflog
查看文件在(不同区域、不同版本、不同分支)之间的差异,用得不多,因为以后开发主要是在图形化工具中使用git。
git diff #比较工作区和暂存区文件的差异(默认)
git diff HEAD #比较工作区和版本库文件的差异
git diff --cached #比较暂存区和版本库文件的差异
git diff <版本1的ID> <版本2的ID> [file_name] #比较两个版本文件的差异
git diff HEAD~n HEAD [file_name] #比较当前版本和上n个版本文件的差异
使用这个命令,会将文件从工作区和暂存区同时删除,然后需要再提交一下,更新版本库中内容
git rm <file_name>
如果想只在暂存区删除一个文件,而工作区不删除,可以加上–cached参数
git rm --cached <file_name>
在.gitignore文件中添加一些文件或文件夹(比如:日志文件.log、编译中间文件、临时文件等),可以使得在提交时,将.gitignore中的文件被忽略,不提交。
但是当前.gitignore中的文件不能是已经被添加到版本库中的文件,当这些文件发生修改时,git还是会检测到其内容的修改。
匹配规则:从上到下逐行匹配,每一行表示一个忽略模式,官网匹配规则
提示:github上提供了常用语言的忽略文件模板。
在本地创建一个ssh秘钥:
ssh-keygen -t rsa -C "[email protected]" -b 4096
它会要求输入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
git add .
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中文意思是“变基”,也是用来整合分支的,可以在任意分支上使用rabase命令整合分支,整合完都是一条直线,但顺序会有所不同:
恢复已合并的分支:
git checkout -b <branch_name> <branch_id>
git switch dev
git rebase main
git switch main
git rebase dev
Rebase合并:
给当前的提交打上标签,通常用于版本发布:
git tag <tag_name>
在开发过程中,在一个分支开发新的功能,还没开发完毕,做到一半时有反馈需要处理紧急bug,但是新功能开发了一半又不想提交,这时就用到了stash命令,储藏当前工作现场:
git stash save “message” | 将当前工作现场存储到堆栈中 |
---|---|
git stash list | 查看所有stash |
git stash pop | 恢复最近一次stash,并在list中删除这次stash |
git stash pop stash@{n} | 恢复指定的stash,stash@{0}表示最近的stash |
git stash apply n | 恢复指定的stash,但不会再list中删除 |
git stash drop stash@{n} | 在list中删除指定的stash |
git stash clear | 删除所有stash |
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声音好听,没有废话!!!