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 可以更好地保持提交历史和元数据。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值