Git
基础
--local/局部 --global/全局
- git init
- git config --local user.name "2732810281@qq.com"
- git config --local user.password "8863934304"
- git config --local user.email "2732810281@qq.com"
- git config --list 配置列表
-
git config user.name 取特定的配置
-
git add .
- git commit -m 'ts'
- git push origin/源 master/远程分支
- git push
<local-branch>:<remote-branch> - git log 日志
源
- git remote add origin_m1 https://gitee.com/zhaojun696/mm1.git 添加
-
git remote set-url origin_m1 https://gitee.com/zhaojun696/mm1.git 更新
-
git remote -v 所有源地址
- git remote get-url origin 获取指定源地址
- git remote remove origin
- git remote rename old new 重命名
lfs
- git lfs install 安装
- git lfs track "*.csv" 添加追踪配置 本质是修改.gitattributes
- git lfs untrack "*.csv" 删除追踪配置 本质是修改.gitattributes
- git lfs ls-files 查看哪些文件被追踪
- git lfs migrate import --include=".jpg,.png" 将所有历史库中 .jpg 和 .png 文件迁移到 Git LFS
克隆
- git clone url https://user需url编码:pass/www.xx.git
- git clone url . 不新建文件夹克隆
合并
将指定分支的更改合并到当前分支。 git merge和git rebase是两种不同的分支合并策略,它们有一些区别和适用场景。
- git merge
<branch> - git pull --rebase origin
<remote-branch>
git merge:这是最常用的分支合并策略。它会将指定分支的更改合并到当前分支,并创建一个新的合并提交。合并提交会保留原始分支的提交历史,形成一个合并的分支历史。这种方式适用于保留分支间的独立性和可追溯性,以及多人协作的场景。
git rebase origin def456/branch:这是一种改变提交历史的分支合并策略。它会将当前分支的更改应用到目标分支上,并重新创建一系列新的提交。这样可以使提交历史更加线性,减少合并提交的数量。这种方式适用于个人开发分支或者在私有分支上进行工作的场景。
使用git rebase时需要注意以下几点: git rebase会改变提交历史,因此只应在本地分支上使用,不要在已经推送到远程仓库的分支上使用。
如果在git rebase过程中发生冲突,你需要解决冲突并手动继续git rebase的操作。
由于改变了提交历史,如果其他人也在同一个分支上工作,你需要小心处理合并冲突。
总之,git merge适用于多人协作和保留分支独立性的场景, 而git rebase适用于个人开发分支和保持提交历史线性的场景。
fetch
访问远程仓库,从中获取本地版本库没有的数据。 执行完成后拥有那个远程仓库中所有分支的引用,可以随时合并或查看。本地远程分支列表不会自动更新,fetch命令可以更新,但如果远程仓库有删除的分支,那么在更新时本地远程分支列表并不会将其删除。
- git fetch
<remote><branch>从 仓库 抓取特定的<branch>。不使用<branch>来获取所有远程参考 - git fetch origin --all 获取更新的列表和所有远程分支的内容,远程分支列表不会自动更新
pull
- git pull 在一个跟踪分支上输入 git pull,Git 能自动地识别去哪个服务器上抓取、合并到哪个分支
- git pull --rebase 通过变基来更新自己的本地分支,默认merge
- git pull --rebase
<remote>获取当前分支的远程副本,并将其重定为本地副本。使用 git rebase 代替 merge 来整合分支 - git pull
<remote>获取当前分支的指定远程副本,并立即将其合并到本地副本中 - git pull:这个命令实际上是 git fetch 和 git merge 的组合。它会从远程仓库下载最新的提交历史和文件,并自动将这些更新合并到你的当前分支
标签
创建标签
- git tag v1.0
查看标签
- git tag
给特定提交创建标签:可以使用git tag命令加上-a选项来给特定提交创建标签,并添加一些说明信息。例如,要给提交abc123创建一个名为v1.0的标签,可以执行以下命令:
- git tag -a v1.0 -m "Release version 1.0" abc123
推送标签到远程仓库:默认情况下,git push命令不会将标签推送到远程仓库。要将标签推送到远程仓库,可以使用git push命令加上--tags选项。例如:
- git push origin --tags
删除标签:使用git tag -d命令删除本地标签。例如,要删除名为v1.0的标签,可以执行以下命令:
- git tag -d v1.0
要删除远程仓库中的标签,可以使用git push命令加上--delete选项。例如,要删除远程仓库中的名为v1.0的标签,可以执行以下命令:
- git push origin --delete v1.0
分支
git cherry-pick命令用于选择一个或多个提交,并将它们应用到当前分支上。这个命令可以用于将其他分支上的特定提交合并到当前分支,而无需合并整个分支。 以下是使用git cherry-pick命令的基本语法:
- git cherry-pick abc123 def456
创建分支:使用git branch命令创建一个新的分支。例如,要创建一个名为feature的新分支,可以执行以下命令:
- git branch feature
切换分支:使用git checkout命令切换到指定的分支。例如,要切换到名为feature的分支,可以执行以下命令:
- git checkout feature
创建并切换分支
- git checkout -b feature
- git branch -a #查看所有分支
- git branch -r #查看所有远程分支
- git branch 显示本地分支列表,当前分支用星号 “*” 标识出来
- git branch -r 显示远程分支(--remotes)
- git branch -a 显示所有分支(--all)
- git branch -v 查看每一个分支的最后一次提交
- git branch -vv 查看所有分支,正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有,需要先fetch
- git branch develop 基于当前头指针(HEAD)指向的提交,创建一个develop分支
- git branch bugfix ab1afef 基于提交ab1afef创建bugfix分支
- git branch -d hotfix 删除分支。该分支必须完全合并到其上游分支中,如果没有使用 --track 或 --set-upstream-to 设置上游,则在合在HEAD中
- git branch -D hotfix 强制删除hotfix分支,即使hotfix 支没有合并到上游分支
- git branch -m
<oldbranch><newbranch>重命名分支 - git branch -f master HEAD~3 -f 选项让分支指向另一个提交,将master分支强制移动到HEAD的第3级父提交
- git branch --merged 查看哪些分支已经合并到当前分支
- git branch --no-merged 查看所有包含未合并工作的分支
- git branch --no-merged master 尚未合并到master的分支
- git branch (--set-upstream-to=
<upstream>| -u<upstream>) [<branchname>] 设置<branchname>的跟踪信息,使<upstream>被视为<branchname>的上游分支。如果没有指定<branchname>,则默认为当前分支 - git branch -u origin/serverfix 设置或修改已有的本地分支serverfix跟踪一个刚刚拉取下来的远程分支
- git branch [--track[=(direct|inherit)]
<branchname>[<start-point>] -t、--track 或 --track=direct 表示使用起点分支本身作为上游;--track=inherit 表示复制起点分支的上游配置 - git reflog show --date=iso bugfix 指定bugfix分支的历次更改记录,最下面一条的时间即是分支创建时间
- git branch --contains commit 列出所有包含指定提交对象的分支
推送
-f 强制推送
- git push
<remote><branch>推送分支到<remote>,以及必要的提交和对象。如果远程仓库不存在,则在远程仓库中创建命名分支 - git push
<remote>--all 将所有本地分支推送到指定的远程分支 - git push origin new_branch 将new_branch分支推送到origin服务器, 并创建new_branch分支,但不会建立跟踪
- git push --set-upstream remote_name local_branch remote_branch 将本地分支的副本推送至远程服务器,并设置跟踪上游分支
- git push -u origin master 上条命令简写,将master 支推送到origin服务器,本地分支master跟踪远程分支master
- git push origin --delete serverfix 删除一个远程分支, 从服务器上删除serverfix分支
修改提交
- git add .
- git commit --amend
- git push
git commit --amend 是一个用于修改最近一次提交的 Git 命令。它允许你在不创建新的提交的情况下修改最近一次的提交。 使用 git commit --amend 命令时,会打开一个文本编辑器,允许你修改提交的消息。你可以编辑提交消息并保存,这将会修改最近一次提交的消息。 此外,git commit --amend 还可以用于添加或修改最近一次提交中的文件。 你可以先添加或修改文件,然后使用 git add 命令将更改添加到暂存区,最后运行 git commit --amend 来修改最近一次提交。 需要注意的是,如果你已经将提交推送到远程仓库 那么修改最近一次提交后,你需要使用 git push --force 命令来强制推送修改后的提交
回退
- git reset abc123 软回退
- git reset --hard abc123 硬回退
- git reset --hard origin/master 用远程分支
- git revert
<commit>产生一个新提交,新的提交相当于撤销<commit>这个提交
暂存
- git add
<file>:将指定的文件添加到暂存区。可以使用文件路径、文件名或通配符来指定要添加的文件。例如,git add index.html 将 index.html 文件添加到暂存区。 - git add . 或 git add --all:将所有修改的文件添加到暂存区。这会将当前目录下的所有文件和子目录中的修改都添加到暂存区。
-
git reset
<file>:从暂存区中移除指定文件,但保留在工作目录中的修改。这个命令可以用于撤销 git add 操作。 -
git stash 命令用于将当前工作目录中的修改保存到一个临时区域,以便你可以切换到其他分支或恢复到干净的工作目录状态。下面是 git stash 的常用用法:
- git stash save [
<message>]:将当前工作目录中的修改保存到一个新的存储项(stash)中。可选的<message>参数可以用于给存储项添加描述信息。例如,git stash save "WIP: Work in progress" 将修改保存到一个新的存储项,并添加描述信息。 - git stash list:列出所有存储项。这会显示存储项的索引号、描述信息和保存时的提交哈希值。
- git stash apply [
<stash>]:将指定的存储项应用到当前工作目录,但不会从存储项列表中移除。如果没有指定<stash>参数,默认应用最新的存储项。 - git stash pop [
<stash>]:将指定的存储项应用到当前工作目录,并从存储项列表中移除。如果没有指定<stash>参数,默认应用最新的存储项。 - git stash drop [
<stash>]:从存储项列表中移除指定的存储项。如果没有指定<stash>参数,默认移除最新的存储项。 - git stash clear:移除所有存储项,清空存储项列表。 使用 git stash 命令可以暂时保存你的修改,然后在需要的时候再恢复它们。这对于在切换分支或处理紧急任务时非常有用。
删除历史提交
- git filter-branch --tree-filter 'rm -f 文件路径' HEAD
- git filter-branch --tree-filter 'rm -rf *' -- --all
缓存
- git rm --cached 路径
- git rm -r --cached .
命令的作用是将当前 Git 仓库中所有文件和目录从暂存区(Index)中移除,但不会删除它们在工作目录中的实际文件。这个命令通常用于解决 Git 仓库中某些文件不应该被跟踪的问题。 命令会将当前目录下的所有文件和目录从暂存区中移除,但不会删除它们在工作目录中的实际文件。这个命令通常用于解决 Git 仓库中某些文件不应该被跟踪的问题,例如忽略某些文件或目录。
日志
- git log --author="提交人名字" 提交日志
- git log --author="提交人名字" --stat 代码统计(增删改数量)
- git log --author="提交人名字" --since="2023-01-01" --until="2023-03-01" --stat 带时间范围的统计
- git shortlog -sn --author="提交人名字" 提交次数
- git shortlog -sn 提交者列表
- git count-objects -vH 仓库大小