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

1. 初始化一个 Git 仓库

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

git init

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

2. 克隆一个远程仓库

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

git clone https://github.com/username/repository.git

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

3. 查看 Git 状态

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

git status

4. 查看 Git 提交历史

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


git log

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

bash

git log --oneline

5. 添加文件到暂存区

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

  • 添加单个文件:

    
    git add filename
    
  • 添加所有更改的文件:

    
    git add .
    

6. 提交更改

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


git commit -m "提交的消息"

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

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

git push 

7. 查看 Git 配置信息

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

 
git config --list

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

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

8. 创建分支

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

  • 创建一个新分支:

    git branch new-branch
    
  • 切换到新分支:

    bash
    
    
     
    git checkout new-branch
    
  • 查看分支

    git branch
    

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

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

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
 
git merge feature-branch

11. 删除分支

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

  • 删除本地分支:

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

    bash
    
    
     
    git branch -D branch-name
    

12. 推送更改到远程仓库

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

bash


 
git push origin branch-name

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

bash


 
git push -u origin main

13. 拉取远程仓库的更新

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

bash


 
git pull origin branch-name

14. 查看远程仓库信息

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

bash


 
git remote -v

15. 解决冲突

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

bashCopy codegit add conflicted-file
git commit -m "Resolved merge conflict"

16. 删除远程分支

删除远程仓库中的分支:

bash


 
git push origin --delete branch-name

17. 查看文件差异

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

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

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

    bash
    
    
     
    git diff --cached
    

18. 回退提交

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

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

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

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


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

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

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

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

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

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

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

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

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

步骤:

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

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

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

    bash
    
    
    Copy code
    git push --force
    

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

使用场景

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

基本语法

bash


Copy code
git cherry-pick <commit-hash>

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

使用步骤

  1. 查看提交历史

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

    bash
    
    
    Copy code
    git log
    

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

    输出示例:

    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
    
    
    Copy code
    git checkout dev
    
  3. 执行 cherry-pick 操作

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

    bash
    
    
    Copy code
    git cherry-pick abc1234567890
    

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

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

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

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

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

       
      
      
       
      git add <conflicted-file>
      
    • 然后继续完成 cherry-pick 操作:

       
      
      
       
      git cherry-pick --continue
      

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

     
    
    
     
    git cherry-pick --abort
    
  5. 完成操作并提交

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

    使用 git log 查看是否成功:

     
    
    
     
    git log
    

示例:挑选多个提交

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

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

     
    
    
     
    git cherry-pick commit1 commit2 commit3
    
  2. 选择一段提交范围

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

    bash
    
    
    Copy code
    git cherry-pick commit1^..commit3
    

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

处理冲突

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

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

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

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

     
    
    
     
    git cherry-pick --continue
    

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

 


 
git cherry-pick --abort

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

注意事项

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

总结

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

11-22 12:24