命令框语法:
一、最基本使用方法(最常用)
初试设置:
git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
核心初始操作:
git remote add origin https://github.com/yourusername/your-repo.git 修改远程仓库的 URL:(2个方案选择一个即可)git remote set-url origin <your_git_server_url> git remote -v git remote set-url origin git@github.com:your-username/your-repo.git ssh -T git@github.com 对一个orihin添加多个url 仅push有效
git remote set-url --add --push origin <第一个远程仓库地址>
设置代理:(这个代理设置是在Vscode中需要设置的,笔者不确定在命令端是否需要,可以先不做设置,需要再做设置)git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080
git config --global --unset http.proxy
git config --global --unset https.proxy
npm config delete proxy
注意:这个端口是本地梯子的代理的端口(比如vray里面设置的端口,或者谷歌浏览器中的设置代理的端口,端口+1,-1 之类的多试试)
参考文章:
git设置和取消代理:https://gist.github.com/laispace/666dd7b27e9116faece6
git设置代理:https://blog.csdn.net/m0_57567093/article/details/127455214
二、正常使用流程:
git init
git add .
git commit -m "your message"
git push -u origin main
远程服务器代码(A)传远程服务器代码(B)可以 git clone A到本地。再git push 到B。 PS:应该用更简洁的语法。
补充1:
git push
git pull git pull 其实等价于:git fetch origin main git merge origin/main
补充2:
第一次运行推荐:
git push -u origin main || origin是在本地给远程url命名的名字。(git remote -v 可以查看) || main是分支名字
等价于:git push --set-upstream origin main
它的作用是:第一次推送本地 main 分支到远程 main 分支。建立本地 main 分支和远程 main 分支的关联
以后可以直接使用:git push或者git pull,而不用每次都写 origin main。什么时候不需要 -u:
(1)如果你已经设置过 upstream(上游分支),直接运行:git push (第一次运行设置过了,或者特意之前设置好了)
手动设置 upstream:git branch --set-upstream-to=origin/main main
取消 upstream:git branch --unset-upstream(2)有一种情况 git clone就不需要 指定 -u origin main。其他情况都得写,指定origin main
也可以直接写git push origin main。但是每次都得 指定 origin main,写-u就一劳永逸了 上游分支(upstream branch) 是指 本地分支默认跟踪的远程分支:
查看当前分支的 upstream:git branch -vv
三、视频笔记
!!!视频:【狂神说Java】Git最新教程通俗易懂:https://www.bilibili.com/video/BV1FE411P7B3?spm_id_from=333.788.videopod.episodes&vd_source=62490e786f2d05c76576cee122805e39&p=9
语法:
.gitigore 配置过滤文件,哪些文件不提交,具体可以看视频git config -l
git config --system -l
cls
clear
git config --global -l git log git语法:
git init 本地初始化
git clone [url] 克隆代码git status
git status [filename]
git add .
git commit -m “XXX”
git push
git push origin master git branch
git branch -a
git branch -r
git branch -v
git branch -vv 和 git branch -vvv
git branch dev
git checkout -b [branch]
git merge [branch]
git branch -d [branch-name]
git push origin --delete [branch-name]
git branch -dr [remote/branch]
git remote -v Untracked(未跟踪)
Unmodify(未修改)
Modified(已修改)
Staged(已暂存)|---------<------git add-------<--------------------------------------|| | 暂存区 |
Untracked(未跟踪)----git add--->Staged(已暂存) || Unmodify(未修改)----主动修改或者 git reset HEAD filename--->Modified(已修改) | | | | || | | ------<----git checkout- ----------------------------------------||------------<----git rm---------<-- | (取消修改回到上一个状态)(移出版本库) |git commit -m "XXX" (文件再次变成 Unmodify(未修改))方向: 向下||本地库 --- git push ->云端库----git clone-->Unmodify(未修改)在 Git 里,git checkout 可以用于取消工作目录里文件的修改,不过在 Git 2.23 及之后的版本,更推荐使用 git restore 来完成这项操作。
git add 单个文件(使用:相对路径/绝对路径 都可以)
git add 文件夹(使用:相对路径/绝对路径 都可以)
Git 实际上跟踪的是文件而非文件夹本身,添加文件夹意味着会递归地添加该文件夹下的所有文件和子文件夹。git
gitee 又叫 码云 IntelliJ IDEA 自动连接
github VScode 自动连接
linux语法学习。(遇见狂神说)
自己搭建博客。
四、其他一些知识补充
同时向github和gitee 传:
方法一:每次切换时修改远程仓库 URL:
git remote -v 查看当前远程仓库配置
git remote set-url origin https://gitee.com/yourusername/your-repo.git 修改远程仓库 URL 到 Gitee
git push origin main 推送代码到 Gitee
git remote set-url origin https://github.com/yourusername/your-repo.git 若要切换到 GitHub,修改远程仓库 URL 到 GitHub
git push origin main 推送代码到 GitHub方法二:添加多个远程仓库
你可以为本地仓库添加多个远程仓库,分别指向 Gitee 和 GitHub,然后根据需要选择推送到哪个远程仓库。
git remote add gitee https://gitee.com/yourusername/your-repo.git 添加指向 Gitee 的远程仓库
git remote add github https://github.com/yourusername/your-repo.git 添加指向 GitHub 的远程仓库
git push gitee main 推送代码到 Gitee
git push github main 推送代码到 GitHub方法三:设置多个推送地址
如果你希望每次执行 git push 时,同时将代码推送到 Gitee 和 GitHub,可以设置多个推送地址。
git remote -v 查看当前远程仓库配置
git remote set-url --add --push origin https://gitee.com/yourusername/your-repo.git 添加多个推送地址
git remote set-url --add --push origin https://github.com/yourusername/your-repo.git 添加多个推送地址
git push origin main 推送代码
执行 git push 时,代码会同时推送到 Gitee 和 GitHub。
这种方式的优点是操作简单,只需一次 git push 就能同时更新多个远程仓库;缺点是如果某个远程仓库出现问题,可能会影响推送过程。
同时更新多个分支的内容:
方法一:逐个推送(依次对每个分支执行推送操作。)
git checkout branch1
git push origin branch1
git checkout branch2
git push origin branch2方法二:设置多个推送地址(适用于一次性将所有分支推送到多个远程仓库)
如果你有多个远程仓库,并且希望将所有本地分支的更新同时推送到这些远程仓库,可以设置多个推送地址。
git remote add another-origin1 <另一个远程仓库地址>
git remote add another-origin2 <另一个远程仓库地址> git push --all origin
在远程创建分支:
1.通常的做法是 先在本地创建分支,然后推送到远程:
git checkout -b new-branch
git push -u origin new-branch
查看远程分支是否创建成功:
git branch -r2.直接在远程仓库(GitHub/GitLab)手动创建分支:
远程创建后,在本地拉取 如果你在 GitHub 或 GitLab 上创建了 new-branch,在本地需要同步:
git fetch origin
git checkout new-branch
git pull origin new-branch 方法 3:通过 git push 在远程创建分支(不先切换本地分支)
如果你不想切换分支,而是直接从当前分支创建一个远程分支:
git push origin main:new-branch
然后在本地切换到这个新分支:
git checkout -b new-branch origin/new-branch
获取其他分支:
如果你想在本地操作远程仓库的其他分支,可以使用以下方法将其拉取到本地:方法一:手动创建并跟踪远程分支:git checkout -b dev origin/dev 方法二:直接切换到远程分支(自动创建本地分支):git checkout origin/feature-1
知识点补充:
1.对git的bash命令行,即便没有配置邮箱,仅凭借远程仓库的 URL ,从技术层面而言,也可以将代码推送到远程仓库。
2.如果远程 main 分支有更新,且本地没有同步,直接 git push 可能会失败,需要先 git pull。
3.git config -l 查看内容之后,回不到原来的bash界面
方法:命令输出内容较多,使用了分页工具:q 键
另外:终端卡住或异常: Ctrl + C 组合键
4.把本地 dev 分支的代码推送到远程的 src 分支:git push origin dev:src ( 如果远程 src 分支不存在,Git 会自动创建 src 分支。)
5.git push origin main:main 省略成 git push origin main
6.自己的代码托管平台(如 GitHub、GitLab 、Gitee)推送操作:git push 命令用于将本地的提交推送到远程仓库。这一步需要进行身份验证,但身份验证方式不一定是登录云端账户界面。例如使用 SSH 协议时,只要你本地的 SSH 密钥与远程仓库的配置匹配,就可以完成推送,无需在云端界面登录;使用 HTTPS 协议时,你可以使用个人访问令牌(如 GitHub 的 Personal Access Token)进行身份验证,也无需登录云端账户界面。
无那种开放账户,都是需要进行一些身份验证之类的。
6.分支(Branch):是指向某个提交对象的可变指针。它代表了一条独立的开发线路,允许开发者在不影响其他分支的情况下进行功能开发、问题修复等操作。每次提交时,分支指针会移动到新的提交对象上。
7.标签(Tags):是指向某个提交对象的不可变指针。它用于给特定的提交打一个有意义的标记,通常用于标记软件的发布版本、重要里程碑等,标签一旦创建就不会再改变。
8.注意:git commit -m "XXX" 的时候,在有.git的目录下执行。否则会直接打开下一级目录下对应的文件,让你去编辑之类的(比如:系统自动打开Vscode,不知道让你编辑什么鬼东西)。
9.另外:不同位置执行 git config -l 输出的内容是不一样的。(有.git的文件夹的内容就多。其他的文件夹 只有 基本的用户和系统的配置)
五、对VScode上的git操作:
git config --list 查看所有参数
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
设置名字或者邮箱,如果设置错了就再重新输入一遍就行。
官网文章:https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup
参考视频:给傻子的Git教程:https://www.bilibili.com/video/BV1Hkr7YYEh8/?spm_id_from=333.337.search-card.all.click&vd_source=62490e786f2d05c76576cee122805e39
设置代理:
https://gist.github.com/laispace/666dd7b27e9116faece6
git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080
git config --global --unset http.proxy
git config --global --unset https.proxy
npm config delete proxy
参考文章:
git设置和取消代理:https://gist.github.com/laispace/666dd7b27e9116faece6
pycharm上git的使用方法:
pycharm(IDEA,pycharm和IDEA是一家的)的学习方法:https://blog.csdn.net/a18307096730/article/details/124586216?spm=1001.2014.3001.5502
六、git语法训练平台的学习语法的记录
网址:https://learngitbranching.js.org/?locale=zh_CN
提交:
git commit -m "your message" 提交暂存区的更改,并附上提交信息。
git commit --amend 修改 上一次提交的内容(在不创建新提交的情况下)切换:
git checkout <name> 切换分支或者节点合并:
git merge <source-branch> 切换到目标分支后,合并<source-branch>分支
git rebase main 当前在bugFix分支上,命令执行之后,main和bugFix在一条线上,bugFix的上一级是main。当前位置是bugFix分支。移动:
git checkout main^ 移动到main的上一次操作
git checkout HEAD~4 在当前的head位置向上移动4次改分支:
git branch <branch-name> 创建新分支
git branch -f main HEAD~3 强制将main的这个分支的(末)位置 移到HEAD向上移动3个位置 (将HEAD~3 替换成节点也是可以的 比如 C1(不是末分支名eg:bugFix))
git checkout -b <new-branch-name> 创建并切换到新分支。head脱离时候,执行了 git commit ,想保留这次提交记录 。输入这个命令,会创建新节点且head指向分支名(head归位)撤销: C0->C1->C2 当前位置C2,即head位置 || head==HEAD || head^==head~1
git reset head^ (重置head^) 撤销本地分支 (直接删除C2, 变成C0->C1)(对大家一起使用的远程分支是无效的)
等价于 git reset C1git revert HEAD (恢复head) 撤销远程分支 (创建新状态C2',与状态C1状态一样,用于撤销C2的 ,变成 C0->C1->C2->C2')
等价于 git revert C2git branch -d <branch-name> 删除本地分支git cherry-pick <提交号> 把之前提交记录抓过来放 当前的HEAD的下面 (若夹在中间,创建新分支。否则顺接。其实核心还是顺着分支走。例子:杂项1)C0->C1->C2->C3->C4->C5 当前位置C5
git rebase -i HEAD~4 对C2,C3,C4,C5 操作,可视化操作,直接弹出框 (-i是--interactive 的 缩写)【copy所选择的所有节点,按照操作去创建新分支,同时会带走原来这个分支的所有节点,保留分支名所对应的节点。】
等价于:git rebase -i C1 对C2,C3,C4,C5操作。
七、最后的记录
笔者自己的操作过程(可以不用看):
1.代理在使用Vscode的git的时候设置过了。
2.设置git代码托管平台的url_1,设置名字和邮箱。(不设置邮箱,也能使用,有一些网站要求提交需要有)
3.克隆(git clone)远程代码到本地仓库。
4.删除其他内容,保留.git就行。
5.之后 git checkout -b one
6.git add .
7.git commit -m "Add new feature"
8.git push -u origin one 【origin是本地设置的远程仓库的名字,one是分支】
【git config -l 中的参数 remote.origin.url=ip 可以 再 更改配置。 语法:(git remote set-url origin <your_git_server_url> origin 和<your_git_server_url> 可以自己设置)】
9.加上github的url_2:(我想同时传2个代码托管平台)
git remote set-url --add --push origin ip_2
10.再git push。(但是发现只能往url_2上传)检查:
(1)$ git remote -v
origin ip_1(fetch)
origin ip_2 (push)
(2)git库所在文件夹的config文件:(好像也可以直接在这里改,但是笔者没有改)
pushurl = ip_211.再执行:
git remote set-url --add --push origin ip_2
git remote set-url --add --push origin ip_112.$ git remote -v
origin ip_1 (fetch)
origin ip_2 (push)
origin ip_2 (push)
origin ip_1 (push)注:
1.只能有一个push (应该是,有待考证)
更换push:git remote set-url origin <新的远程仓库地址>
2.ip_1,ip_2是真实url,因为敏感问题,才换成ip_1,ip_2检测不到一些文件的解决方法:
git status --ignored 查看下被忽略掉的文件有哪些
cat .gitignore 查看.gitignore文件 并 修改参考文章:
git 检测不到文件修改:https://blog.csdn.net/yy_diego/article/details/124318100
切换分支时候,相当于进入另一个文件夹,如果main原来有不属于的文件(非云端,自己加的)会删除,但是文件夹会保留并报错:
Dell@DESKTOP-LMCRSGF MINGW64 ~/Desktop/Demo (zero)
$ git checkout zero
warning: unable to rmdir 'windturbine_yolo': Directory not empty
branch 'zero' set up to track 'origin/zero'.
Switched to a new branch 'zero'
处理方法
1.手动清理目录:cd windturbine_yolorm -rf * cd..git checkout zero2.忽略警告继续操作:如果 windturbine_yolo 目录中的内容是你希望保留的,并且不影响新分支的使用,你可以忽略这个警告,继续进行其他操作。Git 虽然发出了警告,但仍然成功切换到了新分支,说明它已经尽力处理了工作目录的状态。3.使用 git stash(暂存修改):如果 windturbine_yolo 目录中的文件是你正在处理的未提交的修改,你可以使用 git stash 命令将这些修改暂存起来,然后再切换分支。之后,在需要的时候可以使用 git stash apply 命令恢复暂存的修改。git stashgit checkout zerogit stash apply 总之,这个警告本身并不一定会阻止你继续使用 Git,但根据你的具体需求,你可能需要采取一些措施来处理 windturbine_yolo 目录,以确保工作目录的状态符合你的期望。正常下载会把所有分支下载下来,通过git checkout [branch-name] 查看所有分支内容。
但是下载下来只会显示main分支,切换分支会在本地创建分支 对应云端的分支。会自动创建对应分支。(但是云端的内容很早就下载下来了。)【当你使用 git clone 命令克隆一个仓库时,默认情况下只会克隆远程仓库的默认分支(通常是 main 或 master)到本地,而不是所有分支。不过,远程仓库上的其他分支信息其实也会被拉取下来,只是本地并不会为这些分支创建对应的本地分支副本。】但是上传的时候,如果不设置,默认只上传一个分支。git push -u origin [branch---想上传的分支名字]
三个值得记录的点:
1.在自己的仓库查看配置文件(可以直接去对应文件夹里修改文件)
git config --system -l
git config --global -l 2.同时传2个代码托管平台遇到的问题
仅有一个git代码托管平台的时候:
$ git remote -v
origin ip_1 (fetch)
origin ip_1 (push)git remote set-url --add --push origin ip_2 $ git remote -v
origin ip_1 (fetch)
origin ip_2 (push) 解决办法:
git remote set-url --add --push origin ip_2
git remote set-url --add --push origin ip_1$ git remote -v
origin ip_1 (fetch)
origin ip_2 (push)
origin ip_2 (push)
origin ip_1 (push)
这时候就可以同时push2个git代码托管平台了3.部分代码传不上git代码托管平台
真实原因: .gitigore 配置过滤文件,哪些文件不提交
但是要注意,不要只检测.git所在的目录,也要检测你的.git的所在目录的 一些子文件下是否有.gitigore 配置过滤文件检测不到一些文件的解决方法:
git status --ignored 查看下被忽略掉的文件有哪些
cat .gitignore 查看.gitignore文件 并 修改参考文章:
git 检测不到文件修改:https://blog.csdn.net/yy_diego/article/details/124318100