2022-08-24 22:39:33
浏览数 (1)
git操作一般分为三个阶段:
工作目录
文件系统中实际文件的状态,可以跟踪或取消跟踪,可以更改或删除。
暂存区或索引
我们根据其更改为新版本准备一组文件的区域
HEAD
它是当前分支中的指针,它具有完整的存储库历史记录
每个阶段的命令如下:
工作目录
git 命令 | 描述 |
---|
git init
| 将普通文件夹初始化为 Git 存储库 |
git status
| 显示工作目录和 INDEX 的更改 |
git status -sb
| 将更改显示为列表 |
git add .
| 将所有更改添加到索引 |
git add {file or folder}
| 将特定更改添加到 INDEX |
git rm {file or folder}
| 从工作目录中删除文件(用于新提交) |
git add -A .
| 添加所有更改并删除到 INDEX |
git clean -d -f
| 放弃更改(清理工作目录) |
git checkout {file}
| 恢复文件内容(因为它在 HEAD 上) |
git stash
| 保存未完成的工作(本地更改) |
git stash -m "WIP"
| 保存未完成的工作(本地更改)并命名 |
git stash pop
| 带回您保存的未完成工作 |
git stash list
| 列出您当前拥有的 stash |
git stash pop [stash]
| 删除单个隐藏状态并将其应用于当前分支 |
git stash apply [stash]
| 像 pop,但不要从存储列表中删除状态 |
git stash -U [stash]
| 存储更改添加未跟踪的文件 |
git log --since="1 weeks ago"
| 显示上周的当前提交 |
git log [-p] {file}
| 显示对特定文件的更改 |
git log {branch..master}
| 两个分支的区别 |
git log -S 'text'
| 显示与文本匹配的更改 |
git log {directory}
| 显示特定目录的更改 |
git grep {something}
| 列出与某事匹配的提交 |
git reflog
| 像 git log,但显示已删除的提交(参见 git reset) |
暂存区
git 命令 | 描述 |
---|
git commit -m 'comment...'
| 使用在 INDEX 上添加的更改创建提交 |
git commit -am 'comment...'
| 添加(跟踪的文件)并创建提交 |
git commit --amend ['comment...']
| 将更改添加到最后一次提交 |
git restore --staged {file or folder}
| 从暂存区域中删除文件/文件夹 - 撤消 git add |
git reset HEAD {file}
| 撤消添加命令,将更改的文件保留在工作目录中 |
git reset HEAD
| 撤消所有添加的文件,将更改保留在工作目录中 |
git remote prune origin
| 通过删除远程删除的分支来清理本地分支 |
git ls-remote --refs origin
| 列出远程分支,包括 PR 分支 (refs/pull/PR_NUMBER/head |
git fetch origin pull/[PR_NUMBER]/head:pr/[PR_NUMBER]
| 获取 PR 代码到本地仓库 |
git checkout pr/[PR_NUMBER]
| 对 PR 分支内容的更改(在上面的命令中获取) |
HEAD
git 命令 | 描述 |
---|
git show {sha1}
| 显示当前提交详细信息 |
git checkout {sha1}
| 签出(导航)到特定 sha1(提交)中的代码 |
git checkout HEAD
| 结帐(导航)到 HEAD 中的代码 |
git revert {sha1}
| 创建一个撤消特定提交的新提交 (sha1) |
git revert HEAD
| 创建一个新的提交撤消上一次提交 |
git reset {sha1}
| 将当前 HEAD 重置为指定状态 {sha1} |
git reset --merge {sha1}
| 将当前 HEAD 重置为指定状态 {sha1},保持工作目录上的当前更改 |
git reset HEAD~1 --soft
| 撤消最后一次提交,保留 INDEX 上的更改 |
git reset HEAD~1
| 撤消最后一次提交,保留工作目录上的更改 |
git reset HEAD~1 --hard
| 撤消最后一次提交,丢弃所有更改 |
git reset HEAD --hard
| 撤消对 INDEX 和工作目录的所有更改 |
git reflog
| 列出所有 {sha} 并从重置中恢复 --hard |
git bisect start
| 开始二分查找引入 bug 的变化 |
git bisect bad HEAD
| 将 HEAD 标记为坏 |
git bisect good {sha1}
| 将最后一次提交标记为良好 |
git bisect {good/bad}
| 将中间提交标记为好或坏 |
git bisect reset
| 返回到 git bisect start 之前签出的提交 |
git remote [add/rm] {repo_alias} {url}
| 管理您跟踪其分支的存储库集 |
git remote add {repo_alias} -f {url}
| 添加并获取远程存储库 |
git remote [-v]
| 列出远程存储库 |
git push
| 使用本地提交更新远程仓库 |
git rebase {branch}
| 添加来自指定分支的当前分支提交 |
git rebase -i HEAD~3
| 进行一组最后三个提交 |
git clone {repo url}
| 将存储库克隆到新目录 |
git clone -b {branch} {repo url}
| 克隆存储库分支 |
git fetch
| 从另一个存储库(.git/FETCH_HEAD)下载对象和引用 |
git pull {alias} [master]
| 从另一个存储库中获取并与主库合并 |
git pull [-s strategy] [-X options] [alias] [branch]
| 使用自定义选项从另一个存储库中获取并合并 |
git merge {branch}
| 将当前分支与另一个指定分支合并 |
git merge {branch} --squash
| 将当前分支与另一个指定分支合并,保留 INDEX 上的更改 |
git branch -a
| 列出远程和本地分支 |
git branch {new_branch}
| 创建一个新的本地分支 |
git branch -m {old-name} {new-name}
| 重命名本地分支 |
git branch -rd origin/{branch}
| 本地删除分支 |
git push origin --delete bugfix
| 远程删除同一个分支 |
git checkout -b {new_branch}
| 创建并更改到新的本地分支 |
git checkout {branch}
| 更改到另一个现有分支 |
git switch {branch}
| 更改到另一个现有分支 |
git switch -c {branch}
| 创建并更改到新创建的分支 |
git push -u {repo_alias} {branch}
| 将本地分支推送为远程分支 |
git branch -d {branch}
| 删除本地分支 |
git push {repo_alias} --delete {branch}
| 删除远程分支 |
git tag {v1.0}
| 创建一个新标签 |
git push origin {v1.0}
| 使用新标签更新远程存储库 |
git format-patch master --stdout > bugfix.patch
| 针对主服务器创建补丁(提交不在主服务器中) |
git apply --stat bugfix.patch
| 列出补丁的更改(不应用它) |
git am --signoff --ignore-whitespace ‹ bugfix.patch
| 在当前分支上应用补丁 |
git merge second_repo/master -s recursive -X ours
| 合并当前仓库 |