关键词:git 常用命令
关键词:git 常用命令
在日常生活的开发工作中,以下是一些常用的 Git 命令:
配置相关
- git config:
- 用途:用于配置 Git 的各种参数,如用户姓名、邮箱等基本信息,这些信息会关联到每一次提交记录。
- 示例:
git config --global user.name "Your Name"
:设置全局的用户名,这个名字会出现在你提交的代码记录中。git config --global user.email "[email protected]"
:设置全局的邮箱,用于标识提交者身份,方便团队协作时追踪提交来源。
仓库初始化与克隆
- git init:
- 用途:在本地创建一个新的 Git 仓库。通常用于开始一个全新的项目,将当前目录初始化为一个可以被 Git 管理的仓库。
- 示例:在一个新的项目文件夹下执行
git init
,就会在这个文件夹中创建一个隐藏的.git
文件夹,用于存储仓库的相关信息。
- git clone:
- 用途:用于从远程仓库(如 GitHub、GitLab 等)克隆代码到本地。这是获取已有项目代码的常用方法。
- 示例:
git clone [远程仓库地址]
,例如git clone https://github.com/user/repository.git
,这样就可以把名为repository
的远程仓库代码克隆到本地。
状态查看与文件管理
- git status:
- 用途:查看工作区(本地仓库目录)的状态,包括文件的修改、新增、删除情况,以及文件是否已被添加到暂存区等信息。
- 示例:在项目目录下执行
git status
,可以看到类似“Changes not staged for commit”(未暂存的修改)或者“Untracked files”(未跟踪的文件)等状态信息。
- git add:
- 用途:将工作区的文件修改添加到暂存区,告诉 Git 哪些文件的变化需要被包含在下一次提交中。
- 示例:
git add [文件名]
:比如git add main.py
,将main.py
文件的修改添加到暂存区。git add.
:将当前目录下所有文件的修改添加到暂存区,但不包括新添加的未跟踪文件。git add -A
:添加所有文件的修改,包括新添加的未跟踪文件。
- git rm:
- 用途:用于从工作区和暂存区删除文件,并且在下次提交时记录这个删除操作。
- 示例:
git rm [文件名]
,例如git rm old_file.txt
,将old_file.txt
文件从工作区和暂存区删除。
提交与历史记录查看
- git commit:
- 用途:将暂存区的内容提交到本地仓库,形成一个新的版本记录,需要添加提交注释来描述这次提交的内容。
- 示例:
git commit -m "Initial commit"
,其中-m
选项后面的内容就是提交注释,用于简要说明本次提交做了什么。
- git log:
- 用途:查看提交历史记录,包括每次提交的作者、日期、提交注释和提交哈希值等信息,方便追踪项目的开发历程。
- 示例:执行
git log
后,会以逆序(最新的提交在最上面)显示提交记录,如可以看到提交哈希值像commit 123456789abcdef...
,作者名字,日期和提交注释等内容。
分支管理
- git branch:
- 用途:用于创建、查看和删除分支。分支是 Git 中非常重要的概念,可以让开发者在不影响主分支的情况下进行功能开发或者实验。
- 示例:
git branch
:查看本地所有分支,当前分支会以*
标识。git branch [分支名]
:创建一个新的分支,例如git branch new-feature
,会创建一个名为new - feature
的新分支。git branch -d [分支名]
:删除一个已经合并的分支,比如git branch -d old-branch
。
- git checkout:
- 用途:用于切换分支或者恢复工作区文件。可以让你在不同分支之间切换,以进行不同的开发工作。
- 示例:
git checkout [分支名]
:切换到指定分支,如git checkout master
,会将工作区切换到master
分支。git checkout -b [新分支名]
:创建一个新分支并切换到该分支,例如git checkout -b dev-branch
,相当于同时执行了git branch dev - branch
和git checkout dev - branch
两个操作。
远程仓库操作
- git remote:
- 用途:用于管理远程仓库的信息,如添加、查看和删除远程仓库的关联。
- 示例:
git remote -v
:查看已经配置的远程仓库及其对应的推送和拉取地址,会显示类似origin https://github.com/user/repository.git (fetch)
和origin https://github.com/user/repository.git (push)
的信息。git remote add [远程仓库名] [远程仓库地址]
:添加一个新的远程仓库关联,例如git remote add origin https://github.com/user/new - repository.git
,这里origin
是远程仓库名,后面是仓库地址。
- git push:
- 用途:将本地仓库的分支和提交记录推送到远程仓库,使得远程仓库的内容与本地保持同步。
- 示例:
git push [远程仓库名] [本地分支名]
,如git push origin master
,将本地master
分支推送到名为origin
的远程仓库。
- git pull:
- 用途:从远程仓库拉取最新的分支和提交记录到本地仓库,并自动尝试合并到当前分支。
- 示例:
git pull [远程仓库名] [本地分支名]
,通常简单地使用git pull
(如果已经配置好远程仓库和分支追踪),就可以拉取并合并远程仓库对应的分支到本地当前分支。
标签管理
- git tag
- 用途:用于给特定的提交打上标签,方便标记重要的版本号、里程碑等。比如在发布软件版本时,可以用标签来标识版本号。
- 示例:
git tag -a v1.0 -m "Version 1.0 release"
:创建一个带有注释的标签v1.0
,注释内容为Version 1.0 release
。git tag
:查看所有标签,会列出所有已创建的标签名称。git push origin [标签名]
:将本地标签推送到远程仓库,例如git push origin v1.0
,这样远程仓库也能看到这个标签。
暂存操作
- git stash
- 用途:当你正在进行一项工作,但需要切换分支去处理其他紧急事情时,可以使用
git stash
将当前工作区和暂存区的修改暂存起来。之后可以再恢复这些暂存的修改继续工作。 - 示例:
git stash
:暂存当前的修改。git stash list
:查看所有暂存记录,会显示类似stash@{0}: WIP on master: 1234567...
的信息,其中stash@{0}
是暂存记录的索引。git stash pop
:恢复最近一次暂存的修改,并将其从暂存列表中删除。如果有多个暂存记录,可以使用git stash apply stash@{1}
(这里stash@{1}
是指定的暂存记录索引)来恢复特定的暂存记录。
- 用途:当你正在进行一项工作,但需要切换分支去处理其他紧急事情时,可以使用
合并与变基
- git merge
- 用途:用于将一个分支的修改合并到另一个分支。比如将开发分支(
dev
)的功能合并到主分支(master
)。 - 示例:
- 首先切换到要合并到的分支,例如
git checkout master
,然后执行git merge dev
,就可以将dev
分支的修改合并到master
分支。合并过程中可能会出现冲突,需要手动解决冲突后再提交。
- 首先切换到要合并到的分支,例如
- 用途:用于将一个分支的修改合并到另一个分支。比如将开发分支(
- git rebase
- 用途:和
git merge
类似,也是用于整合分支修改,但git rebase
是将提交历史“变基”,使得提交历史更加线性。一般在希望保持提交历史整洁的情况下使用。 - 示例:假设在
feature
分支开发了新功能,现在想将其变基到master
分支的最新提交上。首先切换到feature
分支,如git checkout feature
,然后执行git rebase master
。在变基过程中,如果出现冲突,需要手动解决冲突,然后继续执行git rebase --continue
。
- 用途:和
- git cherry-pick
- 用途:它允许你从一个分支中选择一个或多个提交(commit),然后将这些提交应用到当前分支。简单来说,就是 “摘取” 其他分支上的特定提交,并把它们的更改应用到你正在工作的分支上。
- 示例:
- 场景示例:假设你有一个主分支(
master
)和一个开发分支(dev
)。在dev
分支上,开发人员发现并修复了一个紧急的软件漏洞,这个修复提交为commit - A
。现在,你希望把这个修复也应用到master
分支,而不是将整个dev
分支合并到master
,因为dev
分支可能还包含其他未经过充分测试的功能。 - 操作步骤:首先切换到
master
分支(git checkout master
),然后使用git cherry - pick <commit - A的哈希值>
。这样,commit - A
中的更改就会被应用到master
分支,就好像这个修复是在master
分支上直接进行的一样。这在保持主分支稳定的同时,能够快速地将关键的修复传播到需要的分支。
- 场景示例:假设你有一个主分支(
撤销操作
- git reset
- 用途:用于撤销提交或者将暂存区的文件修改回退。可以根据不同的参数实现不同程度的撤销。
- 示例:
git reset [文件名]
:将暂存区中指定文件的修改撤销,例如git reset main.py
,如果main.py
已经添加到暂存区,这个命令会将它从暂存区移除,恢复到未暂存的状态。git reset --hard [提交哈希值或分支名]
:彻底回退到指定的提交或者分支状态,这个操作会清除工作区和暂存区的所有未提交修改,例如git reset --hard HEAD~1
会回退到上一个提交的状态,HEAD~1
表示当前提交的前一个提交,使用时要非常谨慎。
- git revert
- 用途:用于撤销已经提交的修改,但会创建一个新的提交来记录这个撤销操作,这样可以保留完整的提交历史。
- 示例:
git revert [提交哈希值]
,例如git revert 123456789abcdef...
,会创建一个新的提交来撤销指定提交所做的修改。