git常用命令

Git 是一个非常流行的分布式版本控制系统,用于跟踪修改和管理项目中的代码。以下是一些常用的 Git 命令和它们的解释,这些命令涵盖了从创建库、操作分支、提交更改到合并代码等常见操作。

基础命令

初始化 Git 仓库

   git init

在当前目录下初始化一个新的 Git 仓库。

克隆远程仓库

   git clone <repository_url>

克隆一个远程仓库到本地。

查看仓库状态

   git status

显示当前分支的状态,包括已更改但未暂存和已暂存但未提交的文件。

添加文件到暂存区

   git add <file_or_directory>

将文件或目录添加到暂存区。

   git add .

将所有更改的文件添加到暂存区。

提交更改

   git commit -m "commit message"

提交暂存区的更改,并附上提交消息。

查看提交历史

   git log

查看提交历史。

   git log --oneline

以简洁的方式查看提交历史。

分支操作

查看分支

   git branch

显示本地分支列表。

创建分支

   git branch <branch_name>

创建一个新的分支。

切换分支

   git checkout <branch_name>

切换到指定的分支。

   git checkout -b <branch_name>

创建并切换到一个新的分支。

删除分支

   git branch -d <branch_name>

删除本地分支。如果分支没有被合并,会拒绝删除。

   git branch -D <branch_name>

强制删除本地分支。

合并和变基

合并分支

   git merge <branch_name>

branch_name 分支合并到当前分支。

变基

   git rebase <branch_name>

将当前分支变基到 branch_name 分支。

在 Git 中,git rebase <branch_name> 命令用于将当前分支的基础(起点)变基到另一个分支 branch_name 上。通俗地说,就是将当前分支的所有提交,重新应用到 branch_name 分支的末端,从而使当前分支的基础与 branch_name 分支相同。这是一种重新组织提交历史的工具,可以导致更线性的提交历史,使其更清晰和易于理解。

为什么使用 Rebase?

清晰的提交历史:通过 rebase,可以消除无意义的合并提交,使提交历史更加线性和简洁。在共享分支前整理提交:在将你的本地分支推送到共享仓库之前,通过 rebase 来整理和清理提交历史。

示例

假设你有以下分支和提交历史:

   A---B---C  (branch_name)
        \
         D---E---F  (current_branch)

当你在 current_branch 上执行 git rebase branch_name 时,结果如下:

   A---B---C  (branch_name)
              \
               D'---E'---F'  (current_branch)

新的提交 D', E', 和 F' 是重新应用的提交,它们与原始的提交 D, E, 和 F 内容相同,但有新的父指针。

具体操作步骤

切换到当前分支:确保你在希望进行 rebase 操作的分支上。

      git checkout current_branch

执行 rebase 操作:通过 git rebase <branch_name> 将当前分支变基到 branch_name 分支。

        git rebase branch_name

处理冲突

在 rebase 过程中,如果碰到冲突,Git 会暂停并提示你解决冲突。你需要手动解决这些冲突,然后继续 rebase 过程。

解决冲突: 手动编辑冲突文件并解决冲突。

标记冲突文件为已解决: 使用 git add 命令将解决后的文件标记为已解决。

      git add <resolved_file>

继续 Rebase: 使用 git rebase --continue 继续 rebase 过程。

      git rebase --continue

终止 Rebase: 如果决定放弃 rebase,可以使用以下命令终止 rebase 过程并恢复到 rebase 之前的状态。

      git rebase --abort

单步示例

以下是一个完整的操作示例:

   # 1. 切换到当前分支
   git checkout current_branch
   
   # 2. 执行 rebase
   git rebase branch_name
   
   # 3. 处理冲突(如果有)
   #  - 解决冲突
   #  - git add <resolved_file>
   #  - git rebase --continue
   
   # 如果想终止 rebase, 使用以下命令:
   # git rebase --abort

Rebase 与 Merge 的比较

  1. Rebase

    • 发生在本地分支。

    • 使提交历史线性清晰。

    • 适合在共享分支之前进行提交整理。

    • 可能造成历史提交的不一致,影响已经共享的历史。

  2. Merge

    • 创建一个新的合并提交,保留两个分支的历史。

    • 适合于多个开发人员协同工作。

    • 提供完整的合并历史记录,不修改现有提交。

Rebase 的最佳实践

  • 不要在公共分支上进行 Rebase:在公共分支上 rebase 会导致其他使用该分支的开发人员出现历史提交不一致的问题。

  • 使你的更改更清晰:在将你的分支 rebase 到主分支之前,可以使用 git rebase -i(交互式 rebase)清理提交历史。

  • 频繁与主分支同步:定期将当前分支与主分支同步,可以减少 rebase 时的冲突。

总结

通过使用 git rebase <branch_name>,可以将当前分支的提交应用到指定分支 branch_name 的基础上。这有助于保持提交历史的清晰线性,但应谨慎使用,特别是在公共分支上进行 rebase 操作。理解和掌握 rebase 操作,是提高 Git 使用效率和代码管理能力的关键。

远程操作

查看远程仓库

   git remote -v

显示已经配置的远程仓库。

添加远程仓库

   git remote add <name> <url>

添加一个新的远程仓库。

拉取远程更改

   git pull

从远程仓库拉取并合并更改到当前分支。

   git pull <remote> <branch>

从指定远程仓库和分支拉取并合并更改。

推送到远程仓库

   git push

推送当前分支到远程仓库。

   git push <remote> <branch>

推送指定分支到指定远程仓库。

删除远程分支

   git push <remote> --delete <branch_name>


删除远程仓库的分支。

标签操作

创建标签

   git tag <tag_name>


创建一个轻量标签。

   git tag -a <tag_name> -m "message"


创建一个带有消息的附注标签。

推送标签到远程仓库

   git push <remote> <tag_name>


推送指定标签到远程仓库。

   git push --tags


推送所有标签到远程仓库。

删除本地标签

   git tag -d <tag_name>


删除本地标签。

删除远程标签

   git push <remote> --delete <tag_name>


删除远程仓库中的标签。

回滚操作

撤销文件的暂存

   git reset HEAD <file>


撤销文件的暂存,使其回到未暂存状态。

取消上一次提交

   git revert HEAD


创建一个新的提交,撤销上一次提交的内容。

重置到特定提交

   git reset --hard <commit_id>


重置当前分支到指定的提交,丢弃所有未提交的更改。

其他常用命令

查看文件差异

   git diff


显示尚未暂存的更改。

   git diff --staged


显示已经暂存的更改。

暂存保存

   git stash


保存当前工作进度,并且将工作目录恢复到干净的状态。

   git stash pop

恢复最后保存的进度,并从暂存区中删除。

   git stash apply


恢复最后保存的进度,但不删除暂存区中保存的内容。

创建补丁

   git format-patch <since_commit>..<until_commit>


创建从 <since_commit><until_commit> 的提交补丁文件。

补丁(patch)是记录了一组文件修改信息的文件,可以用于将这些修改应用到另一个代码库上或共享给其他开发者。Git 使用补丁文件来实现这类操作。以下涵盖如何创建和应用补丁的过程。

创建补丁

Git 允许使用 git format-patch 命令来生成补丁文件。该命令会基于提交记录创建一个或多个补丁文件。

示例

创建一个补丁从最新一次提交到指定的某个提交之间的所有更改:

   git format-patch <commit_id>..HEAD


这会生成一个或多个补丁文件,每个提交一个补丁。

详细创建补丁示例:

假设你有以下提交历史:

   a1b2c3d   commit3
   e4f5g6h   commit2
   i7j8k9l   commit1


你希望创建包含 commit1commit3 的补丁文件,请执行以下命令:

   git format-patch i7j8k9l..a1b2c3d


这会在当前目录下生成两个补丁文件:

   0001-commit2.patch
   0002-commit3.patch


应用补丁

生成的补丁文件可以通过 git applygit am 命令应用到另一个 Git 仓库中。

使用 git apply 命令应用补丁

git apply 主要用于将补丁的更改应用到工作目录中,而不产生新的提交。

   git apply 0001-commit2.patch


这个命令会直接在当前分支上应用补丁文件 0001-commit2.patch 中的更改。

使用 git am 命令应用补丁

git am 不仅会应用补丁的更改,还会保留提交信息等元数据(如提交者、提交日期和提交信息),这在代码审查和协作中尤为重要。

   git am 0001-commit2.patch


这个命令会读取 0001-commit2.patch 文件并创建一个新的提交。

应用多个补丁

如果你有多个补丁文件可以一次性全部应用:

   git am *.patch


这会按顺序应用所有 .patch 文件。

示例:创建和应用补丁

创建补丁:

确保仓库状态干净:确保工作目录和暂存区没有未提交的更改。

      git status


创建补丁:基于指定的提交范围生成补丁文件。

      git format-patch <commit_id>..HEAD


应用补丁:

查看存储路径:将补丁文件复制到你希望应用的项目中。

导航到目标项目目录:进入目标项目目录。

应用补丁:使用 git amgit apply 应用补丁。

      git am <patch_file>


或者:

      git apply <patch_file>


处理补丁冲突

在应用补丁时,如果产生冲突,Git 会给出提示,指引你解决冲突。解决方法和处理一般的合并冲突类似。

使用 git am 时如果遇到冲突:

  1. 解决冲突文件。

  2. 使用 git add 将解决后的文件标记为已解决。

  3. 使用 git am --continue 继续应用补丁。

清理补丁应用

如果在使用 git am 时想要放弃应用补丁,可以使用以下命令:

   git am --abort


总结

  • 创建补丁:使用 git format-patch 命令生成包含提交变更的补丁文件。

  • 应用补丁:使用 git applygit am 将补丁文件的更改应用到新的代码库。

  • 处理冲突:在应用补丁时如果出现冲突,需要手动解决冲突并继续应用过程。

  • 维护元数据:使用 git am 可以更好地保持提交历史和元数据。

理解和掌握这种补丁管理方法,是进行分布式开发和跨团队协作的重要技能,可以提高代码整合和共享的效率。

<think>我们被要求生成一个关于Git常用命令的汇总列表。根据用户的要求,我们需要提供结构清晰的回答,并尽量保证真实可靠。同时,我们参考了站内引用中提供的Git命令信息。根据引用内容,我们可以整理出以下常用命令:1.基本操作(初始化、添加、提交等)2.分支管理3.远程仓库操作4.标签管理5.历史查看与撤销6.其他实用命令(如删除大文件、清理仓库等)我们将按照这些类别来组织命令。注意:由于引用中提供了一些特定问题的解决方案(如删除大文件),我们也会将其作为实用命令的一部分。另外,注意用户要求使用中文回答,并且行内数学表达式使用$...$格式(但本问题不涉及数学表达式,所以忽略),独立公式使用$$...$$格式(同样不涉及)。同时,在回答末尾生成相关问题。我们开始整理Git常用命令汇总:</think>### Git常用命令汇总 以下是Git常用命令分类整理,帮助您高效管理代码版本: #### 1. 仓库初始化与基础操作 ```bash # 初始化新仓库 $ git init # 克隆远程仓库 $ git clone <远程仓库URL> # 查看当前状态 $ git status # 添加文件到暂存区 $ git add <文件名> # 添加单个文件 $ git add . # 添加所有修改 # 提交更改 $ git commit -m "提交说明" ``` #### 2. 分支管理 ```bash # 创建分支 $ git branch <新分支名> # 切换分支 $ git checkout <分支名> $ git switch <分支名> # Git 2.23+推荐方式 # 创建并切换分支 $ git checkout -b <新分支名> $ git switch -c <新分支名> # 合并分支 $ git merge <要合并的分支名> # 删除分支 $ git branch -d <分支名> # 安全删除 $ git branch -D <分支名> # 强制删除未合并分支 ``` #### 3. 远程仓库操作 ```bash # 添加远程仓库 $ git remote add origin <远程仓库URL> # 查看远程仓库 $ git remote -v # 推送到远程仓库 $ git push -u origin <分支名> # 首次推送 $ git push # 后续推送 # 拉取远程更新 $ git pull origin <分支名> $ git pull --rebase origin <分支名> # 变基式拉取 # 删除远程连接 $ git remote rm origin ``` #### 4. 版本回退与撤销 ```bash # 查看提交历史 $ git log $ git log --oneline # 简洁版日志 # 撤销工作区修改 $ git checkout -- <文件名> # 撤销暂存区文件 $ git reset HEAD <文件名> # 版本回退 $ git reset --hard <commit_id> # 彻底回退 $ git reset --soft <commit_id> # 保留修改 # 恢复删除的文件 $ git restore <文件名> # Git 2.23+ ``` #### 5. 标签管理 ```bash # 查看标签 $ git tag # 创建标签 $ git tag <标签名> # 轻量标签 $ git tag -a v1.0 -m "版本说明" # 附注标签 # 推送标签 $ git push origin <标签名> # 删除标签 $ git tag -d <标签名> # 本地删除 $ git push origin :refs/tags/<标签名> # 远程删除 ``` #### 6. 高级维护 ```bash # 清理历史大文件 $ git filter-branch --force --index-filter \ 'git rm -rf --cached --ignore-unmatch <文件名>' \ --prune-empty --tag-name-filter cat -- --all # 回收存储空间 $ git reflog expire --expire=now --all $ git gc --prune=now # 查看仓库大小 $ git count-objects -vH ``` #### 7. 配置相关 ```bash # 设置用户名/邮箱 $ git config --global user.name "用户名" $ git config --global user.email "邮箱" # 查看配置 $ git config --list # 设置默认编辑器 $ git config --global core.editor vim ``` > **最佳实践提示**: > 1. 频繁提交小变更,保持提交记录清晰 > 2. 使用`.gitignore`文件排除无需版本控制的文件 > 3. 重要分支(如main/prod)设置保护规则 > 4. 推送前先执行`git pull --rebase`避免合并提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值