git的基本使用

eve2333 发布于 2024-10-24 102 次阅读


Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

git的使用说重要也不重要,在CS61b开课就教了,CSwiki也建议大一开学就学,nju等一系列985也大一就学,但是不学也不会怎么样,这毕竟只是工具不是知识,大不了工位上随便看一看就行吗,仁者见仁喽
廖雪峰的官方网站-Git:https://www.liaoxuefeng.com/wiki/896043488029600

git的基本命令可直接看最下方总结(点击右侧导航栏)

设置用户(目的在于可以在远端看到是谁提交了内容,更方便公司的管理)
1、设置全局用户(在家路径下创建用户,每个项目都用这一个用户)
        >: git config --global user.name 'manba '
        >: git config --global user.email 'manba@163.com'
2、设置局部用户(局部是指在某个项目下创建用户,可以在不同项目下创建不同用户)
        >: git config  user.name 'manba '
        >: git config  user.email 'manba@163.com'
            
初始化仓库,让git接管你的项目
git init

查看有什么文件
ll

查看仓库状态
git status
    -红色:新建,修改,删除,在工作区没有放到暂存区
    -绿色:放到暂存区,没有提交到版本库
    -没有东西:说明所有变更都被版本管理起来了

将当前路径下的所有变更提交到暂存区
git add .

删除文件
git rm --cached hello.txt 

将暂存区的内容提交到版本库
git commit -m "THIS IS MY CODE" HELLO.txt 

打印此文件
cat hello.txt

在git里面修改
vim hello.txt
进入io界面
//注意老师用的是vim学生阶段不推荐学习vim因为vim学习成本高,
学习很长时间才能看到正面反馈,显然这对于学生来说是不好的,
要找到工作在学不迟,学生阶段不用琢磨这个//
点一下键盘i,修改内容
vi后输入i表示进入编辑模式,输入完毕后按esc键退出编辑模式,
输入“:wq”表示保存并推出,都是linux的基本操作,可以先去学习Linux
 
查看版本管理日志
git log   # 显示作者,版本号,注释
git reflog  # 显示精简信息(版本切换也会显示)

版本穿梭
撤销版本库提交,回到原有的版本当中去
git reset --hard 版本号

撤销工作区操作
git checkout .

撤销暂存区操作 
git reset .
git分支操作
类似于副本的东西,但是不是

仅在工作区进行修改后,切换到其他分支,在返回该分支后可能会出现异常,建议修改后及时上传暂存区、本地库

查看分支
git branch -v
创建分支
git branch 分支名字
切换分支
git checkout 分支名字

合并分支
git merge 要合并的分支名字
冲突的合并分支
即代码有两套不同的分支

 此时合并失败了,需要手动合并代码

master 和 fix-hot 在同一个版本的基础上都进行了修改,merge就是新的覆盖旧的,此时相对基础版本都是新的,git不知道哪个是新,哪个是旧

在vim中手动进行操作,然后进行一下add
在提交本地库中,将要
git commmit -m "merge text"
不要加名字!/
总结:合并不冲突是因为,hotfix复制了master后master没有再次修改,所以合并时直接覆盖。而冲突是hotfix复制后,master和hotfix都修改了,所以冲突

团队内协作跨团队协作

邀请加入团队

setting ->Manage access ->invite collaborotor

把邀请函密钥复制下来,发给B

B在浏览器里打开该网站,按照提示操作即可

其他人打开你的github库,可以在线修改代码。

github的使用

远程库的名字一般和本地的是一样的

他人对于github的远程库,点击fork,操作进行pull request

本人就会收到 pull request,审核后即可merge pull request

git remote -v
查看当前所有远程地址别名

git remote add git-demo URL
添加地址别名

git push 别名 分支名
推送文件向github服务器

现在github要用ssh关联上终端然后用令牌登陆就可以push上去了。

原因如下:如果ssl证书未经过机构认证。会认为未知的没有签署过的证书意味着可能存在很大的风险。

443端口

解决ssh: connect to host github.com port 22: Connection timed out_ssh:connect to host port 22:connection timed out-CSDN博客

Vim/Vi中保存文件并退出编辑器_使用vi/vim编辑器查看当前目录下已存在文件oldfile,然后保存退出vi/vim编辑器;-CSDN博客

2021年8月13日起,Github不再支持使用密码push!老师这个push方法过时了

第一次push 需要加 -u  完整命令 git push -u 别名 master ,自己git 登录的浏览器一定要和认证打开的浏览器是同一个,一直超时,连接手机热点,再上传 看看就好

记得删除凭据管理器的凭据

拉取远程github库
git pull git-demo master

任意拉取一个库
git clone URL
//克隆是本地没有时用的,拉取是本地已经有了的时候用的//
clone会干三件事,1,拉取代码2.初始化本地库3.创建别名

ssh的使用

在C盘里面用户下有.ssh的文件夹,使用以下的命令生成

ssh-keygen -t rsa -C XXXX@163.com
//然后敲三次回车

加密算法可以使用 Ed25519,一般只要不是太旧的机器都支持,比rsa好

打开rsa.pub就是你的私钥

pull是拉取,针对的我已经有本地仓库,但是和远程库数据不同步的情况,克隆是连本地库都没有,直接从远程库copy一份到本地当作本地库

idea的使用

需要忽略一些没有必要的东西

在用户文件夹下,新建一个git.ignore,忽略什么就 *.什么

下面是对IJ的样例文件

# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME) 
.mtj.tmp/

# Package Files #
*.jar
I
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml       		hs_err_pid*

.classpath
.project 
.settings target 
.idea
*.iml 

对于gitconfig文件,可以变成

[user]
    name = Layne
    email=Layne@atguigu.com 
[core]
    excludesfile = C:/Users/asus/git.ignore //windows是反斜线 

在你的idea里面,setting-> version control ->选择自己所在文件里面的git.exe

VCS里面create git resposbility

右键文件,git--->add

idea的切换版本

这里不需要add了吧,idea貌似暂存区概念很弱,追踪后默认就是commit -a的

可以点击那个双向箭头(Show Diff)对比显示修改的代码

idea的下角有version control -》log可以看到版本迭代

右键版本,点击checkout即可

idea的使用分支

右键文件---》git----》----》repository---》Branches-----》new branch

或者idea下角有 git:master,点击即可

idea合并分支

marge into current

有冲突的时候:会出现merge,手动更改一下

idea是可以链接github gitee的,但是懒得用

总结

1.详细内容看学习笔记
2.这里只整理一些命令和场景
3.其实还有很多命令,不过有一些都可以由下面基础的命令得到。例如:要将内容从HEAD恢复到工作区,只需要将内容从HEAD->暂存区->工作区

本地库相关命令

git init # 初始化Git版本库
git clone # 通过克隆开源代码到本地进行版本管理
----------------------------------------
git add <filename> 或 git add . # 提交文件到暂存区
git commit -m "message" # 文件从暂存区提交到版本库,其中"message"是对应提交的注释
----------------------------------------
git status # 查询工作区状态
git diff <filename> # 查看版本库的内容和当前文件内容的区别
----------------------------------------
git log # 显示最近到最远的提交日志,能定位过去的版本
git log --pretty-oneline # 简化git log的输出结果为一行
git reflog # 查看命令日志,能定位未来的版本
git reset --hard HEAD^ # 回退到上个版本
git reset --hard commit_id # 回到指定"commit_id"的版本,commit_id不需要完整
----------------------------------------
git restore <filename> # 将内容从`暂存区`恢复到`工作区`(结果等价于"工作区文件修改撤销")
git restore --staged <filename> # 将内容从`HEAD`恢复到`暂存区`(结果等价于"暂存区文件修改撤销")
git restore --soucre=<commit_id/HEAD> <filename> # 将`指定来源`的内容恢复到`工作区`
----------------------------------------
git rm --cached <filename> # 从暂存区删除文件
git rm <filename> # 从暂存区和工作区中都删除文件(两个区都有该文件,否则报错)=rm+git add,如果带-f参数可以实现强制删除
----------------------------------------
git clean -n # 预览"未被Git跟踪的文件",它们可被删除
git clean -f # 删除未被Git跟踪的文件
git clean -i # 交互式删除未被Git跟踪的文件
----------------------------------------
git stash # 保存"工作现场"
git stash list # 查看保存的工作现场
git stash apply # 恢复工作现场,但是stash内容不删除,删除需要 git stash drop
git stash apply stash@{0} # 恢复特定stash
git stash pop # 恢复工作现场的同时删除stash内容

远程库相关命令

git remote -v # 查看远程库的信息
git remote rm origin # 解除与远程库origin的关联
git remote add origin git@github.com:名称/仓库.git # 关联远程仓库,并起别名为origin
git push -u origin main # -u表示main分支和origin/main分支关联起来,方便后续推送和拉取简化命令
git push origin main # 将本地main分支内容推到远程库origin
git pull --set-upstream-to=origin/dev dev # 将本地dev分支与远程库的dev分支关联
git pull # 拉取远程库对应分支的内容
----------------------------------------
git clone git@github.com:名称/仓库.git # 克隆远程库

分支相关命令

git branch # 查看本地分支
git switch -c <分支a> # 创建并切换分支=git branch <分支a> + git switch <分支a>
git branch -d <分支a> # 删除分支a
git merge <分支a> # 将<分支a>合并到当前分支上
git merge --no-ff -m "xxx" <分支a> # --no-ff表示"禁用快速合并"
git log --graph --pretty=oneline --abbrev-commit # 查看分支合并情况

标签相关指令

git tag v1.0 commit_id # 为对应commit(省略则表示当前提交)打上v1.0标签,可以补充-m ""来指定说明文字
git tag # 查看已打的标签
git show v1.0 # 查看v1.0标签的详细信息