项目开发Git常用指令指南

92 阅读7分钟

项目开发Git常用指令指南

Git 教程:项目开发管理视角

1. Git 简介

Git 是一个分布式版本控制系统,用于跟踪对文件和目录的更改,以便在项目中维护历史记录。它允许团队成员在不影响彼此的情况下工作,并在需要时合并他们的更改。

2. 安装 Git

  • 在 Linux 上: sudo apt-get install git
  • 在 macOS 上: 通过 Homebrew brew install git
  • 在 Windows 上: 下载并安装 Git for Windows

3. 配置 Git

# 设置全局用户名 
git config --global user.name "My Name" 
# 设置全局用户邮箱 
git config --global user.email "my@example.com"
双引号内的内容替换成自己的用户名和邮箱
如果想要个人信息只在本仓库有效,去掉--global
第一种方法:
使用当前目录作为Git仓库:git init
绑定本地文件夹和Git仓库:
git remote add origin <http:........>
第二种方法:
将仓库项目clone到当前文件夹下
git clone <http:.........>
cd到本地仓库中

4. 初始化仓库

  • 创建一个新的仓库或使用现有的仓库:
# 创建新仓库 
git init 
# 克隆现有仓库 
git clone https://github.com/username/repository.git

5. 常用命令

a. 文件状态查看
git status   # 查看当前仓库的状态
b. 添加文件到暂存区
git add <file>   # 添加单个文件
git add .        # 添加所有修改过的文件
c. 提交更改
git commit -m "Commit message"    # 提交暂存区的更改
d. 查看提交历史
git log                # 查看所有提交历史
git log --oneline      # 简化输出
e. 分支管理
git branch                    # 列出所有分支
git branch <branch-name>      # 创建新分支
git checkout <branch-name>    # 切换到指定分支
git checkout -b <branch-name> # 创建并切换分支
git merge <branch-name>       # 合并分支
git branch -d <branch-name>   # 删除分支
git push origin –-delete <remote-branch> #删除远程分支:

f. 远程仓库操作
git remote add origin <repository-url>    # 添加远程仓库
git push origin <branch-name>             # 推送本地分支到远程仓库
git pull origin <branch-name>             # 从远程仓库拉取并合并到当前分支

6. 解决冲突

当合并或拉取更改时,可能会遇到冲突。Git 会标记冲突的文件,则需要手动解决这些冲突。

  • 使用文本编辑器打开冲突的文件,查找冲突标记。
  • 编辑文件以保留所需的更改,删除冲突标记。
  • 再次执行 git add 和 git commit

7. 特殊操作

  • 撤销更改:

    git checkout -- <file>     # 撤销未提交的更改
    git reset HEAD <file>      # 从暂存区移除文件
    git revert <commit-hash>   # 撤销特定提交
    
  • 标签管理:

    git tag <tag-name>          # 创建标签
    git push origin <tag-name>  # 推送标签到远程仓库
    

8. 补充

  • 使用 git diff 来查看文件的差异, 即查看自己修改了什么。
  • 在推送前,使用 git fetch 和 git merge 来获取并合并远程仓库的最新更改。
  • 经常使用 git log 和 git status 来监控项目状态。

本地仓库

本地仓库是指存储在我们的本地计算机上的Git仓库。它包含了项目的完整历史记录,包括所有版本的文件和元数据。本地仓库是开发者进行日常开发工作的基础,我们可以在无需网络连接的情况下进行代码编辑、提交更改、创建分支等操作。本地仓库通常位于项目目录下的一个名为.git的隐藏文件夹中。

远程仓库

远程仓库则是位于另一台计算机(通常是服务器)上的Git仓库。它充当多个开发者之间共享和同步代码的中心点。远程仓库可以是公开的,比如GitHub、GitLab或Bitbucket上的仓库,也可以是私有的,设置在公司内部的服务器上。当我们向远程仓库推送(push)提交时,实际上是在把本地仓库的更改同步到这个中心仓库,使得其他团队成员能够获取更新。同样,我们可以从远程仓库拉取(pull)最新的更改,以保持本地仓库与远程仓库同步。

本地仓库与远程仓库的关系

本地仓库和远程仓库之间的交互主要是通过推送(push)和拉取(pull)操作来实现的。当我们在本地仓库中做出更改并提交后,可以将这些更改推送到远程仓库,这样其他团队成员就可以看到并合并这些更改。同样,为了保持本地仓库是最新的,我们需要定期从远程仓库拉取最新的提交。

样例

假设本人从远程仓库clone了一份代码,然后在本地做了修改,现在需要把新版本上传到远程仓库的分支(brach1)中,相关指令如下:

  1. 查看状态:首先确认哪些文件已被修改。

    git status
    
  2. 添加修改:将修改后的文件添加到暂存区。

    git add <file1> <file2> ...
    

    或者,如果你想添加所有修改:

    git add .
    
  3. 提交修改:提交暂存区的修改到本地仓库。

    git commit -m "Commit message describing the changes"
    
  4. 切换/创建分支:如果本地不存在branch1分支,则需要创建它;如果已存在,则切换到该分支。

    git checkout -b branch1
    

    如果branch1分支已存在,只需切换到该分支:

    git checkout branch1
    
  5. 推送分支:将本地的branch1分支推送到远程仓库。如果远程仓库中也存在branch1分支,那么直接推送即可;如果没有,需要先创建远程的branch1分支。

    git push origin branch1
    

    如果这是第一次推送该分支到远程仓库,并且远程没有对应的分支,可能需要指定分支名:

    git push -u origin branch1
    
  6. 解决冲突(如果有) :在推送过程中,如果远程分支有更新,而本地分支没有及时拉取这些更新,则可能需要先拉取远程分支的最新变化,解决可能的冲突后再重新尝试推送。

    git pull origin branch1
    

    解决完任何冲突后,再次提交:

    git commit
    

在将代码pull到branch1分支以后,我现在如果想把branch1分支合并到主分支(main),需要进行如下操作:

  1. 切换到main分支: 首先,确保当前在main分支上。如果不是,请切换到main分支。

    git checkout main
    
  2. 拉取最新的更改: 在合并之前,最好先从远程仓库拉取最新的更改,确保main分支是最新的。这样可以避免不必要的合并冲突。

    git pull origin main
    
  3. 合并branch1main: 使用git merge命令将branch1分支的更改合并到main分支。

    git merge branch1
    

    如果有冲突,Git会停止合并,并标记出冲突的文件。此时,需要手动解决这些冲突。编辑冲突文件,删除冲突标记,并选择要保留的更改。

  4. 解决冲突: 解决完所有冲突后,使用git status查看哪些文件已经被修改,并使用git add将解决冲突后的文件添加到暂存区。

    git status
    git add <conflicted_file>
    
  5. 提交合并: 所有冲突解决后,可以提交这次合并。

    git commit -m "Merge branch1 into main"
    
  6. 推送更改到远程仓库: 最后,将更改推送到远程仓库的main分支。

    git push origin main
    

    如果远程仓库设置了保护规则,可能需要强制推送(git push --forcegit push -f),但这通常不推荐,因为这可能会覆盖其他人的工作。

  7. 清理本地分支(可选): 如果不再需要branch1,可以考虑将其删除,以保持本地仓库的整洁。

    git branch -d branch1
    

以上步骤将安全地将branch1分支的更改合并到main分支,并解决可能出现的任何冲突。