git常用命令以及注意事项总结

Git 是一个分布式版本控制系统,它帮助开发者管理和记录代码的历史。以下是一些基本的 Git 操作:

1. 初始化一个 Git 仓库

首先,如果你有一个现有的项目或文件夹,并且想将它转换为 Git 仓库,可以使用以下命令:

bash 复制代码
git init

这将在当前目录中创建一个 .git 子目录,Git 会在这个目录中存储版本控制信息。

2. 克隆一个远程仓库

如果你想复制一个远程仓库到本地,使用 git clone 命令:

bash 复制代码
git clone https://github.com/username/repository.git

这将会将远程仓库的所有文件和历史记录下载到本地。

3. 查看 Git 状态

你可以使用 git status 来查看当前工作目录的状态,检查哪些文件已被修改或添加到暂存区。

bash 复制代码
git status

4. 查看 Git 提交历史

要查看项目的提交历史,可以使用 git log

bash 复制代码
git log

如果你希望简化输出,可以使用:

bash

git log --oneline

5. 添加文件到暂存区

在 Git 中,工作区的更改首先需要被"添加"到暂存区(staging area),然后才能提交。使用 git add 将文件添加到暂存区:

  • 添加单个文件:

    bash 复制代码
    git add filename
  • 添加所有更改的文件:

    bash 复制代码
    git add .

6. 提交更改

将文件从暂存区提交到本地 Git 仓库:

bash 复制代码
git commit -m "提交的消息"

每次提交时,建议提供一个简短而清晰的提交信息,以便团队成员理解你做了什么更改。

7. 推送你提交到本地git仓库的文件到远程仓库

bash 复制代码
git push 

7. 查看 Git 配置信息

你可以查看当前的 Git 配置信息:

bash 复制代码
 
git config --list

如果你还没有配置用户名和电子邮件(Git 会用它们来标识提交者),你可以使用以下命令设置:

bash 复制代码
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

8. 创建分支

分支是 Git 中的一个核心概念,用来在不同的工作流中独立开发而不会影响主分支。

  • 创建一个新分支:

    bash 复制代码
    git branch new-branch
  • 切换到新分支:

    bash
    
    
     
    git checkout new-branch
    
  • 查看分支

    bash 复制代码
    git branch

    当前所在的分支前会有一个 * 标记。

  • 或者,创建分支的同时切换到新创建的分支,当想要创建的分支已经存在,git checkout -b会报错:

bash 复制代码
bash


 
git checkout -b new-branch

10. 合并分支

合并分支的作用与使用场景

在 Git 中,合并分支git merge)是将一个分支的更改合并到另一个分支的操作。合并分支的主要作用是:

  1. 整合并行开发的工作 :在多人协作或分支开发的过程中,每个人或每个功能模块通常会在自己的分支上进行开发。完成某个功能后,需要将该功能的修改合并到主分支(如 mainmaster),或合并到开发分支(如 dev)。
  2. 同步多个功能开发 :假设你在多个功能分支上进行开发(例如 feature-1, feature-2),合并操作可以将不同功能分支的改动整合到一起,保证每个分支的改动都可以在主分支中得到体现。
  3. 团队协作:当团队成员分别在不同的分支上工作时,合并可以将他们的工作成果汇集到一起。

什么时候需要使用合并分支?

合并分支通常出现在以下几种场景中:

  • 功能开发完成 :当一个分支(如 feature-branch)的功能开发完成,准备将该分支的更改合并到主分支(如 maindev)时,使用合并操作。
  • 合并工作进度:当多个开发人员在不同的分支上工作时,需要将他们的工作成果合并到主分支。
  • 解决冲突并合并:如果你在一个分支上进行了一些更改,其他人在主分支上也做了更改,在合并时可能会出现冲突,你需要手动解决冲突并完成合并。

将一个分支的更改合并到当前分支。假设你想将 feature-branch 合并到当前分支:

bash 复制代码
bash
 
git merge feature-branch

11. 删除分支

如果你不再需要一个分支,可以删除它:

  • 删除本地分支:

    bash 复制代码
    bash
    
    
     
    git branch -d branch-name
  • 强制删除本地分支(如果分支未合并):

    bash 复制代码
    bash
    
    
     
    git branch -D branch-name

12. 推送更改到远程仓库

将本地的提交推送到远程仓库:

bash 复制代码
bash


 
git push origin branch-name

如果是第一次推送,可能需要指定远程分支名(例如,推送 main 分支):

bash 复制代码
bash


 
git push -u origin main

13. 拉取远程仓库的更新

拉取远程仓库的最新更改并合并到当前分支:

bash 复制代码
bash


 
git pull origin branch-name

14. 查看远程仓库信息

查看配置的远程仓库信息:

bash 复制代码
bash


 
git remote -v

15. 解决冲突

在合并两个分支时,可能会遇到冲突。Git 会标记冲突的文件,你需要手动解决这些冲突,编辑文件并删除冲突标记,然后将文件添加到暂存区并提交:

bash 复制代码
bashCopy codegit add conflicted-file
git commit -m "Resolved merge conflict"

16. 删除远程分支

删除远程仓库中的分支:

bash 复制代码
bash


 
git push origin --delete branch-name

17. 查看文件差异

要查看当前工作区和暂存区、或者暂存区和最近提交之间的差异:

  • 查看工作区和暂存区的差异:

    bash 复制代码
    bash
    
    
     
    git diff
  • 查看暂存区和最近提交的差异:

    bash 复制代码
    bash
    
    
     
    git diff --cached

18. 回退提交

假如我提交错了,如何撤回,然后重新修改,再重新提交

1. 撤回最新的提交并保留修改

如果你想撤回最新的提交,但保留文件的更改以便修改后重新提交,可以使用 git reset

bash 复制代码
bash


Copy code
git reset --soft HEAD~1
  • --soft 选项会撤回最新的提交,并将更改保留在暂存区(staging area)中,允许你重新修改并提交。
  • HEAD~1 表示撤回上一个提交。如果你想撤回多个提交,可以调整 HEAD~n 中的 n

操作步骤:

  1. git reset --soft HEAD~1 会撤回最新的提交,并保留文件更改在暂存区。
  2. 你可以修改文件,然后再通过 git commit -m "新的提交信息" 提交。

2. 撤回最新的提交并不保留修改(只撤回提交)

如果你希望撤回最新的提交,并且不保留这些修改,可以使用 git reset --hard

bash 复制代码
bash


Copy code
git reset --hard HEAD~1
  • --hard 选项会撤回最新的提交,并将工作区和暂存区的文件都恢复到撤回前的状态。

3. 撤回错误的提交并修改,之后重新提交

如果你已经提交了错误的内容(例如,提交了不应该包含的文件),你可以:

  1. 撤回提交并保留更改 (使用 git reset --soft,如上所述),然后修改文件,最后重新提交。

  2. 修改文件后重新添加到暂存区 ,使用 git add

    bash 复制代码
    bash
    
    
    Copy code
    git add <modified-file>
  3. 重新提交修改

    bash 复制代码
    bash
    
    
    Copy code
    git commit -m "修正后的提交信息"

4. 如果已经推送到远程仓库

如果你已经将提交推送到远程仓库,并希望撤回这些提交,你可以使用 git push --force 来强制推送本地的更改到远程仓库。但需要谨慎使用,因为这会重写远程仓库中的历史记录。

步骤:

  1. 使用 git reset --soft HEAD~1git reset --hard HEAD~1 撤回本地的提交。

  2. 重新修改代码并提交。

  3. 强制推送到远程仓库:

    bash 复制代码
    bash
    
    
    Copy code
    git push --force

注意:如果其他人已经拉取了这个提交,强制推送可能会导致他们的本地仓库出现问题,所以在多人协作时需要特别小心。

git cherry-pick 是 Git 中用于从一个分支中选择特定提交并将其应用到当前分支的命令。它常用于将特定的修改或修复从一个分支应用到另一个分支,而不需要合并整个分支的内容。

使用场景

  1. 只需要某些提交:你可能在某个分支上做了多次提交,但只想将其中的一个或几个提交引入到当前工作分支。
  2. 从其他分支提取修复 :你可以通过 cherry-pick 提取其他分支中的 bug 修复或重要提交,而不需要合并整个分支。
  3. 避免复杂的合并 :有时合并可能会引入复杂的冲突或不必要的内容,cherry-pick 允许你更精确地选择哪些提交需要被引入。

基本语法

bash 复制代码
bash


Copy code
git cherry-pick <commit-hash>

其中,<commit-hash> 是你要挑选的提交的哈希值。

使用步骤

  1. 查看提交历史

    如果你不知道要选择哪个提交,可以查看历史提交记录:

    bash 复制代码
    bash
    
    
    Copy code
    git log

    这会显示所有提交的日志记录,包括每个提交的哈希值(commit hash)。

    输出示例:

    bash 复制代码
    bashCopy codecommit abc1234567890... (HEAD -> dev)
    Author: Your Name <you@example.com>
    Date:   Mon Oct 21 16:32:10 2024 +0800
    
        修复了一个 bug
    
    commit def2345678901... (master)
    Author: Your Name <you@example.com>
    Date:   Sun Oct 20 14:29:05 2024 +0800
    
        添加了新功能

    在这个例子中,abc1234567890def2345678901 是两个提交的哈希值。

  2. 切换到目标分支

    在执行 cherry-pick 之前,确保你已经切换到目标分支。例如,如果你想将某个提交引入到 dev 分支,先切换到 dev 分支:

    bash 复制代码
    bash
    
    
    Copy code
    git checkout dev
  3. 执行 cherry-pick 操作

    使用 git cherry-pick 命令,指定你想要挑选的提交哈希值。假设我们要把 abc1234567890 这个提交从 master 分支应用到 dev 分支:

    bash 复制代码
    bash
    
    
    Copy code
    git cherry-pick abc1234567890

    Git 会将该提交的更改应用到当前分支(此处为 dev)。

  4. 解决冲突(如果有):

    如果在应用 cherry-pick 时发生了冲突,Git 会停止并提示你手动解决冲突。你需要:

    • 编辑冲突文件,解决冲突。

    • 标记冲突已经解决,添加文件到暂存区:

      bash 复制代码
       
      
      
       
      git add <conflicted-file>
    • 然后继续完成 cherry-pick 操作:

      bash 复制代码
       
      
      
       
      git cherry-pick --continue

    如果不想继续操作,可以放弃 cherry-pick

    bash 复制代码
     
    
    
     
    git cherry-pick --abort
  5. 完成操作并提交

    如果没有冲突,cherry-pick 会直接生成一个新的提交,并应用到目标分支。

    使用 git log 查看是否成功:

    bash 复制代码
     
    
    
     
    git log

示例:挑选多个提交

如果你想选择多个提交,可以通过以下两种方式:

  1. 选择多个提交的哈希值 (逐个 cherry-pick):

    bash 复制代码
     
    
    
     
    git cherry-pick commit1 commit2 commit3
  2. 选择一段提交范围

    如果你需要选择一个提交范围(例如从某个提交到另一个提交),可以使用 .. 来指定范围:

    bash 复制代码
    bash
    
    
    Copy code
    git cherry-pick commit1^..commit3

    这里 commit1^ 表示 commit1 的前一个提交,commit3 表示范围的结束提交。

处理冲突

如果你在 cherry-pick 时遇到冲突,可以手动解决冲突并继续。具体步骤如下:

  1. Git 会暂停 cherry-pick,你需要手动编辑冲突文件。

  2. 修改文件后,使用 git add 标记冲突已解决:

    bash 复制代码
    bash
    
    
    Copy code
    git add <conflicted-file>
  3. 然后继续 cherry-pick

    bash 复制代码
     
    
    
     
    git cherry-pick --continue

如果在 cherry-pick 过程中你决定放弃操作,可以使用:

bash 复制代码
 


 
git cherry-pick --abort

这将撤销所有未完成的 cherry-pick 操作。

注意事项

  • 提交历史线性化cherry-pick 会在当前分支上创建新的提交,这意味着即使你在两个分支上执行 cherry-pick,也会保留两个不同的提交记录(即使它们内容相同)。这可能会让提交历史看起来有点冗余。
  • 避免重复的提交 :如果你在多个分支上 cherry-pick 相同的提交,可能会造成重复提交,Git 会试图避免冲突,但需要手动处理的冲突仍然可能发生。
  • 谨慎使用与多人协作 :在多人协作时,cherry-pick 操作可能会导致不一致的提交历史,最好在清楚了解所有影响的情况下使用。

总结

这些是一些基本的 Git 操作,能够帮助你进行日常的版本控制和协作开发

相关推荐
海岛日记1 分钟前
git常用操作
git
喝鸡汤5 分钟前
一起学Git【番外篇:如何在Git中新建文件】
git
“αβ”7 分钟前
Windows下使用git配置gitee远程仓库
git
谢家小布柔5 小时前
Git图形界面以及idea中集合Git使用
java·git
winner88816 小时前
git merge 冲突 解决 show case
java·git·git merge·git冲突
玩电脑的辣条哥11 小时前
怎么给git动图扣除背景?
git·抠图
谢家小布柔12 小时前
git中的多人协作
git
isolusion13 小时前
git分支管理及策略
git
isolusion14 小时前
git仓库的基本概念和流程以及一些基本命令
git
scoone15 小时前
VSCode 中 Git 功能比较:内置 Git、GitLens 与 Git History 插件
ide·git·vscode