git使用指南(保姆贴)

2025-02-06 17:25:35 0点赞 3收藏 0评论

训练软件

存储结构

  • 工作区(Working Directory): 文件所在的目录文件夹,包含项目文件,.git 目录(目录里含有所有的项目内容。如修改但未跟踪(未添加到暂存区)的文件,git add 暂存的文件、git commit 提交后的版本库、当前所处分支等信息。

  • 版本库(Repository): 工作区内 .git 目录,里面存储了 git 运行所需的所有数据,包括暂存区 stage、分支信息、提交信息等。

  • 暂存区 Stage: 本地仓库跟踪的文件和修改后未提交的都在缓存区

常用命令

git commit git branch git merge git rebase

相对引用^ ~ 撤销变更

cherry - pick 交互rebase

git tag git descript

1.基础命令

初始化

#新建.git文件夹及git配置初始化 git init

添加

#将项目添加到暂存区 git add . #添加指定文件 git add file.txt #添加指定目录 git add dir/ #使用通配符 git add *.txt

撤销

撤销主要有两个命令git resetgit revert git reset通过回退提交记录来实现撤销,原来指向的记录就像没提交过一样。 git revert用于远程分支.执行后会产生一个新提交记录,而新提交的记录跟上一级的内容是相同的。

#恢复到当前上一级记录, 其中 HEAD 表示最新的提交, HEAD~表示最新提交的上一级 git reset HEAD~ #移除指定文件 git reset HEAD file.txt #新语法 git restore --staged file.txt ##--hard为硬恢复参数,需格外注意,会删除当前版本文件 #恢复到上个版本 git reset --hard HEAD^ #恢复到上上个版本 git reset --hard HEAD^^ #恢复到上 n 个版本 git reset --hard HEAD~n #恢复到指定 commit_id 的版本, commit_id 可以通过 git log 查看 git reset --hard commit_id

提交

#将项目添加到本地仓库 git commit #撤销提交 git commit --amend #将项目添加到本地仓库 git commit -m "提交信息" #添加所有文件到暂存区并提交 (等于自动先执行了 git add .) git commit -am "message"` #连接到远程仓库位置 git remote add origin 远程仓库地址 #推送到远程仓库 git push #指定推送分支 git push -u origin main

查看提交记录

#查看最近记录 git log #查看所有的记录 git reflog

2.高级命令

全局配置和单个仓库的用户名邮箱配置

#配置全局用户名(参数 --global) git config --global user.name “github’s Name” #配置用户邮箱 git config --global user.email “github@xx.com” #查看配置列表 git config --list #配置当前项目的用户名 git config user.name “gitlab’s Name” #配置当前项目的邮箱 git config user.email “gitlab@xx.com” #查看配置列表,显示全局配置+当前项目配置,优先使用当前配置 git config --list

分支

# 查看本地当前在那个分支 git branch # 创建分支 #在当前位置创建分支,不改变HEAD位置 git branch branch_name #在当前位置创建分支,并移动HEAD到新建分支 git checkout -b branch_name # 查看远程分支 git branch -r # 查看所有分支 git branch -a #强制移动分支,将main移动到bug的位置 git branch -f main bug # 创建并切换到指定分支,若不指定则代表创建本地分支 git checkout -b 本地分支名 远程分支名 git switch -c branch_name # 或者切换分支 git checkout 分支名字 # 如:切换到origin/tools分支命令本地分支为”tools” git checkout -b tools origin/tools # 删除分支 git branch -d branch_name # 如果分支未合并,则上面的命令会删除失败,需使用 -D 参数强制删除 git branch -D branch_name # 修改当前所在分支名 git branch -m new_branch_name # 修改指定分支名 git branch -m old_branch_name new_branch_name

相对引用

可以通过提交记录上的哈希值来指定某一个提交记录。一般常用的哈希值有40多位(通过git log来查看),调用的时候可以只用前4位即可,不用全部输入。 git checkout c8c9c7 也可以采用相对引用来调用。 相对引用操作符号有^~ ^跟在分支后面表示往上移动一级(比如Bug);^后跟着数字则表示往上移动的分支为第几分支(比如Bug2),不写数字则代表着主线的父级分支 ~操作符后面跟着数字则代表往上移动几级(比如Bug~3,往上移动3级)

git使用指南(保姆贴)git使用指南(保姆贴)

比较差异

# 工作区与暂存区比较 git diff file # 暂存区与版本库比较, 也可以用 --staged, 效果是一样的 git diff --cached file # 工作区与版本库比较 git diff HEAD file # 工作区和某次提交比较 git diff commit_id file # 比较两次提交 git diff commit_id1 commit_id2

合并分支

合并分支有两种方法, 一种是用git merge,合并时会产生一个特殊的提交记录,并将两个节点所有父级节点内容都包含进来,包括调试信息等等。 第二种是用git rebase。复制提交记录,并在另一个地方逐个放下去。可以创造更线性的提交历史。rebase翻译过来也叫变基,总的来说就是将该分支换个父级基底。 git rebase还有一个交互参数-i,可以通过UI界面来重新排列或者选择某些提交记录。

git使用指南(保姆贴)

# 将指定分支代码合并到主分支中 git merge branch_name # 合并模式有fast forwar(默认),所有测试数据均合并进main。 --no-ff(普通模式),创建分支合并 git merge --no-ff -m "merge branch xxx" branch_name # 将指定分支代码合并到主分支中 git rebase main branch_name # 通过UI界面,将main上面3个提交记录重排。 git rebase -i main~3

合并冲突提示

当合并分支时,如果有冲突,会提示: Auto-merging file.txt CONFLICT (content): Merge conflict in file.txt Automatic merge failed; fix conflicts and then commit the result.

执行 git status 会显示冲突的文件:

On branch main You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Unmerged paths: (use "git add ..." to mark resolution) both modified: file.txt no changes added to commit (use "git add" and/or "git commit -a")

合并冲突解决

这时有两个选择:动解决冲突或放弃合并 1.放弃冲突,恢复合并前的状态: git merge --abort 2.手动合并,需要手动解决冲突,编辑后再提交。

git stash 高级技巧

如果当前正在进行版本功能开发,功能未开发完,无法提交。但主分支需要有bug修复。 可以暂存当前工作区,修复完再恢复。 # 暂存当前工作区 git stash

修复 bug 后,回到开发分支后可以通过 git stash list 查看暂存的内容: stash@{0}: WIP on main: 1385314 merge bug branch

stash@{n} 表示最新m次暂存的内容, WIP 表示工作区(Working Directory)的意思, main 表示当前分支,1385314 表示提交的 commit_id,merge bug branch 表示提交的消息。

#恢复最近暂存的内容(恢复栈顶,恢复后未删除,需手动删除) git stash apply #删除栈顶的内容 git stash drop #恢复并删除栈顶的内容。 git stash pop #恢复指定的内容。 git stash apply stash@{n}`

命令集:

命令说明git stash list查看暂存列表git stash apply stash@{n}恢复暂存内容git stash drop stash@{n}删除暂存内容git stash pop stash@{n}恢复并删除暂存内容git stash show stash@{n}查看暂存的内容(修改的文件)git stash branch branch_name stash@{n}从暂存创建新分支git stash save "message"暂存并添加消息git stash create创建一个暂存,但不应用git stash clear清空暂存列表

cherry-pick 挑选提交

cherry-pick c1 c2 c3 抓取提交记录c1 c2 c3到当前分支。

场景 假设两个分支 master, dev, 你正在 dev 分支开发,使用了 stash 功能你为了修复紧急问题创建了个 bug 分支,修复后合并到 master 分支。

但是你正在开发的 dev 分支也需要这个修复,这时可以使用 cherry-pick 命令将 master 分支的修复 “复制”dev 分支。

git tag 打标签

标签跟分支名有本质上的区别,不会随着提交而移动位置,相当于分支上的一个锚点。

#建立一个标签指向分支bug git tag v1.0 bug

git describe 描述内容

git describe 可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会使用你目前所在的位置(HEAD)。 它输出的结果是这样的: __g tag 表示的是离 ref 最近的标签, numCommits 是表示这个 ref 与 tag 相差有多少个提交记录, hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位。 当 ref 提交记录上有某个标签时,则只输出标签名称

远程仓库

远程分支在本地显示为/,如果切换为origin/main后,再通过git commit提交会产生git HEAD分离的情况。只有远程更新了,本地的远程分支才会更新,要特别注意。

远程下拉

#克隆远程仓库的主分支 git clone #从远程仓库下载本地仓库中缺失的提交记录,并更新远程分支指针 git fetch #抓取更新再合并到本地分支,相当于先执行了`git fetch` 然后又执行了` git merge origin/main` git pull #如果本地已经再做开发,而远端有团队已经提交内容,此时本地是无法提交的。可以通过--rebase的参数来将本地更新,然后再提交 git pull --rebasegit使用指南(保姆贴)git使用指南(保姆贴)

远程上传

#推本地新分支送到远程仓库,如果远程仓库没有这个分支,会自动创建。 git push -u origin 分支名字 不过这样你每次推送都需要指定 `origin branch_name`,可以通过 `git push -u origin branch_name` 一次性推送并关联远程分支,以后推送就可以直接 `git push` 了。 如果你忘记加 `-u` 参数,可以通过 `git branch --set-upstream-to=origin/branch_name branch_name` 关联远程分支。 你可以通过 `git branch -vv` 查看本地分支关联的远程分支。

远程其他命令

#远程跟踪分支 #新建本地分支dev,并和远程分支main相关联 git checkout - b dev origin/main git branch -u origin/main dev


作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
3
扫一下,分享更方便,购买更轻松