git命令大全(持续更新)

命令框语法:

一、最基本使用方法(最常用)

bash 复制代码
初试设置:
git config --global user.name "Your Name"
git config --global user.email "[email protected]" #github,gitee等的邮箱
bash 复制代码
核心初始操作:
git remote add origin https://github.com/yourusername/your-repo.git #用于初次为本地仓库添加远程仓库的连接

修改远程仓库的 URL:(2个方案选择一个即可)
     git remote set-url origin <your_git_server_url>   # HTTPS方式修改    
     git remote -v   #检查修改是否成功
   
     git remote set-url origin [email protected]:your-username/your-repo.git #SSH方式修改
     ssh -T [email protected] #然后测试SSH连接

对一个orihin添加多个url 仅push有效
git remote set-url --add --push origin <第一个远程仓库地址> #--add添加一个新的 URL,而不是替换现有的 URL。--push 表示这些更改仅针对推送(push)操作生效。
bash 复制代码
设置代理:(这个代理设置是在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

二、正常使用流程:

bash 复制代码
git init   #初始化仓库(如果git clone就不用初始化了) 在想传的代码目录下执行
git add .  #注意有空格
git commit -m "your message" # 提交暂存区的更改,并附上提交信息。
git push -u origin main  #origin是在本地给远程url命名的名字。main是要提交分支的名字
远程服务器代码(A)传远程服务器代码(B)可以 git clone A到本地。再git push 到B。 PS:应该用更简洁的语法。 
补充1:
bash 复制代码
git push  #将本地代码推送到远程仓库
git pull  #从远程仓库拉取最新代码并合并到本地分支

git pull 其实等价于:
          git fetch origin main  # 拉取远程最新代码(从名为 origin 的远程仓库拉取 main 分支的最新提交信息到本地,不过本地的文件内容不会有实际改变)
          git merge origin/main  # 合并到本地分支(把之前通过 git fetch 获取到的远程 main 分支的最新提交合并到当前所在的本地分支)
补充2:
bash 复制代码
第一次运行推荐:
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

三、视频笔记

bash 复制代码
!!!视频:【狂神说Java】Git最新教程通俗易懂:https://www.bilibili.com/video/BV1FE411P7B3?spm_id_from=333.788.videopod.episodes&vd_source=62490e786f2d05c76576cee122805e39&p=9
语法:
.gitigore 配置过滤文件,哪些文件不提交,具体可以看视频

git config -l                 #查看所有参数(--list和-l一样)
git config --system -l        #查看系统配置                          系统级配置文件路径:E:\git\Git\etc\gitconfig                   (可以搜索gitconfig去找)
cls                           #清屏(清理全屏),windows中cmd   
clear                         #清屏(清理全屏),linux中bash   
git config --global -l        #用户配置(本地配置,全局配置)            用户配置位置:C:\Users\Dell\.gitconfig

git log                       #查看日志


git语法:
git init  本地初始化
git clone [url] 克隆代码

git status                     #查看所有文件状态
git status [filename]          #查看指定文件状态 
git add .                      #添加所以文件到暂存区
git commit -m  "XXX"           #提交暂存区中的内容到本地仓库     "XXX" 提交信息      除非设置,否则-m不可以省略
git push                       #提交云端
git push origin  master        #提交云端  (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语法学习。(遇见狂神说)
自己搭建博客。

四、其他一些知识补充

bash 复制代码
同时向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 就能同时更新多个远程仓库;缺点是如果某个远程仓库出现问题,可能会影响推送过程。
bash 复制代码
同时更新多个分支的内容:
方法一:逐个推送(依次对每个分支执行推送操作。)
git checkout branch1 # 切换到第一个分支并推送
git push origin branch1
git checkout branch2 # 切换到第二个分支并推送
git push origin branch2

方法二:设置多个推送地址(适用于一次性将所有分支推送到多个远程仓库)
如果你有多个远程仓库,并且希望将所有本地分支的更新同时推送到这些远程仓库,可以设置多个推送地址。
git remote add another-origin1 <另一个远程仓库地址>  # 添加第二个远程仓库
git remote add another-origin2 <另一个远程仓库地址>  # 添加第三个远程仓库
 # 设置多个推送地址 (another-origin 可以自命名 ,其实origin也是可以自命名的)

                             
git push --all origin # 推送所有分支  (这里的 --all 选项表示推送所有本地分支到对应的远程分支。)
bash 复制代码
在远程创建分支:
1.通常的做法是 先在本地创建分支,然后推送到远程:
git checkout -b new-branch  # 创建并切换到 new-branch 分支
git push -u origin new-branch  # 推送 new-branch 到远程,并建立跟踪关系
查看远程分支是否创建成功:
git branch -r

2.直接在远程仓库(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  #main:new-branch 表示 在远程创建 new-branch,并基于本地 main 分支的内容。
然后在本地切换到这个新分支:
git checkout -b new-branch origin/new-branch
bash 复制代码
获取其他分支:
如果你想在本地操作远程仓库的其他分支,可以使用以下方法将其拉取到本地:

方法一:手动创建并跟踪远程分支:git checkout -b dev origin/dev  # 创建本地分支并关联到远程分支(上述命令会创建一个名为 dev 的本地分支,并将其与远程仓库的 dev 分支关联起来,之后你就可以在本地对 dev 分支进行操作。)

方法二:直接切换到远程分支(自动创建本地分支):git checkout origin/feature-1  # 直接切换到远程分支,Git 会自动创建本地分支并关联   (执行此命令后,Git 会自动创建一个与远程 feature-1 分支关联的本地 feature-1 分支,并切换到该分支。)
bash 复制代码
知识点补充:
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操作:

bash 复制代码
git config --list  查看所有参数
git config --global user.name "John Doe"
git config --global user.email [email protected]  #会根据这个邮箱去找对应账户的github并登录授权
设置名字或者邮箱,如果设置错了就再重新输入一遍就行。
官网文章: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
bash 复制代码
设置代理:
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
bash 复制代码
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
bash 复制代码
提交:
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 C1

git revert  HEAD   (恢复head)    撤销远程分支 (创建新状态C2',与状态C1状态一样,用于撤销C2的 ,变成 C0->C1->C2->C2')
等价于 git revert C2



git 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操作。

七、最后的记录

bash 复制代码
笔者自己的操作过程(可以不用看):
1.代理在使用Vscode的git的时候设置过了。
2.设置git代码托管平台的url_1,设置名字和邮箱。(不设置邮箱,也能使用,有一些网站要求提交需要有)
3.克隆(git clone)远程代码到本地仓库。
4.删除其他内容,保留.git就行。
5.之后 git checkout -b one  #建立one分支并转到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_2

11.再执行:
git remote set-url --add --push origin ip_2
git remote set-url --add --push origin ip_1

12.$ 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

bash 复制代码
切换分支时候,相当于进入另一个文件夹,如果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_yolo
              rm -rf *  # 注意:这个命令会递归删除目录下的所有文件和子目录,请谨慎使用
              cd..
              git checkout zero

2.忽略警告继续操作:如果 windturbine_yolo 目录中的内容是你希望保留的,并且不影响新分支的使用,你可以忽略这个警告,继续进行其他操作。Git 虽然发出了警告,但仍然成功切换到了新分支,说明它已经尽力处理了工作目录的状态。

3.使用 git stash(暂存修改):如果 windturbine_yolo 目录中的文件是你正在处理的未提交的修改,你可以使用 git stash 命令将这些修改暂存起来,然后再切换分支。之后,在需要的时候可以使用 git stash apply 命令恢复暂存的修改。

              git stash
              git checkout zero
              git stash apply # 之后恢复暂存的修改

总之,这个警告本身并不一定会阻止你继续使用 Git,但根据你的具体需求,你可能需要采取一些措施来处理 windturbine_yolo 目录,以确保工作目录的状态符合你的期望。



正常下载会把所有分支下载下来,通过git checkout [branch-name] 查看所有分支内容。
但是下载下来只会显示main分支,切换分支会在本地创建分支 对应云端的分支。会自动创建对应分支。(但是云端的内容很早就下载下来了。)【当你使用 git clone 命令克隆一个仓库时,默认情况下只会克隆远程仓库的默认分支(通常是 main 或 master)到本地,而不是所有分支。不过,远程仓库上的其他分支信息其实也会被拉取下来,只是本地并不会为这些分支创建对应的本地分支副本。】

但是上传的时候,如果不设置,默认只上传一个分支。git push -u origin  [branch---想上传的分支名字]

bash 复制代码
三个值得记录的点:
1.在自己的仓库查看配置文件(可以直接去对应文件夹里修改文件)
git config --system -l        #查看系统配置                          系统级配置文件路径:E:\git\Git\etc\gitconfig                   
git config --global -l        #用户配置(本地配置,全局配置)            用户配置位置:C:\Users\Dell\.gitconfig


2.同时传2个代码托管平台遇到的问题
仅有一个git代码托管平台的时候:
$ git remote -v
origin  ip_1 (fetch)
origin  ip_1 (push)

git remote set-url --add --push origin ip_2  #再加一个git代码托管平台

$ git remote -v         
origin  ip_1 (fetch)
origin  ip_2 (push)       #这时候智能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
相关推荐
weixin-a153003083164 小时前
git常用命令
git
前端小干将5 小时前
开发过程中,git常用命令
git
西柚啊6 小时前
Git常用命令总结
前端·git
云梦谭8 小时前
Git 配置 GPG 提交签名
git·gpg
李艺为11 小时前
Ubuntu下展锐刷机工具spd_dump使用说明
android·linux·git·ubuntu
掘根17 小时前
Git分支管理
git
极小狐17 小时前
极狐GitLab 项目 API 的速率限制如何设置?
大数据·运维·git·elasticsearch·gitlab
残月只会敲键盘17 小时前
Git 命令速查手册
大数据·git·elasticsearch
掘金沸点顶流19 小时前
同一台电脑配置多个 git 账户(github, gitee, gitlab等)
git
苦逼IT运维1 天前
Git LFS 学习笔记:原理、配置、实践与心路历程
笔记·git·学习