说明
- 1. git add
- 2. git commit
- 3. git push
- 4. git checkout
- 5. git reset
- 6. git cherry-pick
- 7. git merge
- 8. git rebase
- 9. git status
- 10. git diff
常用的 Git 命令及其说明,包括 add、commit、push、checkout、reset、cherry-pick、merge、rebase、status和diff。
1. git add
作用:将文件的修改添加到暂存区(Stage)。这一步并不会提交到版本库,只是为下一步的提交做准备。
常用命令:
-->$ git add <filename>:将单个文件添加到暂存区。-->$ git add .:将当前目录下的所有更改(包括新增、修改和删除)添加到暂存区。-->$ git add -p:交互式地添加文件的部分更改到暂存区。
2. git commit
作用:将暂存区的修改提交到本地版本库,形成一个新的提交(Commit)。
常用命令:
-->$ git commit -m "commit message":提交暂存区的内容并附带提交信息。-->$ git commit --amend:修改上一次的提交信息,或将新的更改合并到上一次提交。
3. git push
作用:将本地版本库的提交推送到远程版本库(如 GitHub、GitLab 等),使远程仓库与本地同步。
常用命令:
-->$ git push origin main:将本地主分支(main)的提交推送到远程的 main 分支。-->$ git push origin <branch_name>:将本地指定分支推送到远程分支。
4. git checkout
git checkout 命令用于切换分支、恢复文件或提交的历史版本。它是 Git 中一个非常重要的命令,主要用于版本控制和分支管理。
git checkout 的常用用法:
-
切换到其他分支
-->$ git checkout <branch-name> 作用:切换到指定的分支。如果分支不存在,可以创建并切换到新分支(见下文)。eg: -->$ git checkout feature-branch 这将把当前的工作区切换到 feature-branch 分支上。
-
创建并切换到新分支
-->$ git checkout -b <new-branch-name> 作用:创建一个新的分支并切换到该分支,相当于执行 git branch <new-branch-name> 和 git checkout <new-branch-name> 两条命令。
-
恢复文件到特定版本或提交的状态
-->$ git checkout <commit-hash> -- <file-path> 作用:将文件恢复到指定提交或版本的状态。
git checkout 常用场景:
- 切换分支:在开发过程中切换到不同的功能分支进行工作。
- 创建新分支:在当前分支的基础上创建一个新的功能或修复分支。
- 恢复文件:从历史版本中恢复文件的状态,或撤销最近的更改。
- 切换到特定的提交:在代码历史中回溯和测试之前的某个特定版本。
注:
- git checkout 可能会导致未保存的更改丢失,尤其是当你在切换分支或恢复文件时未保存当前工作区的更改。
- 在 Git 2.23 之后,引入了两个更明确的命令:git switch 和 git restore,用于替代部分 git checkout 的功能:
- git switch:用于切换或创建分支。
- git restore:用于恢复工作区文件或从历史提交中恢复文件。
5. git reset
作用:撤销提交或修改的命令,用于重置暂存区或当前分支的状态。
常用命令:
-->$ git reset HEAD~1:将当前分支的最后一次提交撤销,并将更改保留在工作区。-->$ git reset --hard HEAD~1:将当前分支的最后一次提交和更改完全撤销,工作区也将被重置。-->$ git reset <filename>:将某个文件从暂存区移除,但保留工作区的更改。
6. git cherry-pick
git cherry-pick 命令用于将其他分支或提交历史中的某一个或多个特定的提交应用到当前分支。这在需要将某些独立的更改从一个分支引入另一个分支时非常有用,而不需要合并整个分支或变基。
git cherry-pick 的使用方法:
-
基本用法
- 作用:将指定的提交(commit)应用到当前分支。
-->$ git cherry-pick <commit-hash>eg: -->$ git cherry-pick a1b2c3d 这里的 a1b2c3d 是你要挑选的提交的哈希值。执行这条命令后,这个提交的更改将被应用到当前分支,并形成一个新的提交。
- 作用:将指定的提交(commit)应用到当前分支。
-
挑选多个提交
- 作用:这会将指定的多个提交依次应用到当前分支。
-->$ git cherry-pick <commit1> <commit2> <commit3>eg: -->$ git cherry-pick a1b2c3d e4f5g6h
- 作用:这会将指定的多个提交依次应用到当前分支。
-
按范围挑选提交
- 作用:将包含范围内的所有提交应用到当前分支。
-->$ git cherry-pick <start-commit>^..<end-commit>eg: -->$ git cherry-pick a1b2c3d^..e4f5g6h 这会将从 a1b2c3d 到 e4f5g6h(包含)的所有提交应用到当前分支。
- 作用:将包含范围内的所有提交应用到当前分支。
-
处理冲突
在 cherry-pick 过程中,如果遇到冲突,需要手动解决冲突,然后运行以下命令继续:-->$ git cherry-pick --continue
如果不想继续,可以使用以下命令取消此次操作:
-->$ git cherry-pick --abort
注意事项:
- git cherry-pick 不会影响原始分支的提交历史,它只是将指定的提交应用到当前分支,适用于将独立的更改引入到其他分支。
- 处理冲突时,要确保每一个冲突都正确解决,否则可能会引入不必要的错误。
- git cherry-pick 是一个非常灵活的工具,可以在跨分支引入特定更改时提供极大便利。
7. git merge
作用:将其他分支的修改合并到当前分支,用于整合代码。
常用命令:
-->$ git merge <branch_name>:将指定分支(branch_name)的提交合并到当前分支。-->$ git merge --abort:如果在合并过程中发生冲突且无法解决,可以使用此命令取消合并。-->$ git merge --no-ff <branch_name>:非快进合并,将合并历史记录保留下来,方便回溯。
8. git rebase
作用:将一个分支的修改应用到另一个分支上,从而重写提交历史。
常用命令:
-->$ git rebase <branch_name>:将当前分支的提交应用到指定分支(branch_name)上,达到合并的效果,但不会生成多余的合并提交。-->$ git rebase -i HEAD~3:交互式变基,选择性地修改、删除或合并最近的三次提交。-->$ git rebase --continue:当变基过程中遇到冲突并解决后,继续变基。-->$ git rebase --abort:取消变基操作,恢复到变基前的状态。
每个命令在实际操作中都可以结合选项和参数使用,根据需求调整操作。Git 的灵活性很强,熟练掌握这些基本命令可以帮助你有效地管理代码版本和协作开发。
9. git status
git status 命令用于查看当前 Git 仓库的状态,显示哪些文件发生了更改、哪些文件已被暂存、哪些文件未被追踪等信息。它是一个非常常用的命令,帮助开发者了解当前工作区的状况,并决定下一步的操作。
git status 的功能与输出说明:
-
查看工作区和暂存区的状态
-->$ git status输出内容: On branch branch_name:显示当前所在的分支名称。 Changes not staged for commit:列出工作区中被修改但未被添加到暂存区的文件。 Changes to be committed:列出已被暂存、但尚未提交的文件。 Untracked files:列出未被 Git 跟踪的新文件。 nothing to commit, working tree clean:表示工作区和暂存区都是干净的,没有未跟踪或未提交的更改。
-
详细输出解读
Modified:文件已被修改,但尚未暂存。 New file:一个新文件已被添加到暂存区。 Deleted:一个文件被删除,并且已被暂存等待提交。 Untracked files:显示未被 Git 跟踪的文件,这些文件还没有被添加到版本控制中,需要使用 git add 添加。
git status 的应用场景:
-
检查当前分支的状态:在进行任何提交之前,使用 git status 确保所有的更改都已按预期被暂存或提交。
-
查看未被追踪的文件:git status 会列出未被追踪的文件,提醒你是否需要将这些新文件添加到版本控制中。
-
检查冲突:在合并或变基的过程中,git status 可以帮助你识别冲突的文件,并指引你解决这些冲突。
On branch main Your branch is up to date with 'origin/main'.Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory)modified: file1.txtdeleted: file2.txtUntracked files: (use "git add <file>..." to include in what will be committed) new_file.txt
通过 git status 的输出,你可以清楚地知道哪些文件需要暂存或提交,以及是否有未追踪的文件需要被添加到版本库中。这个命令是每次提交或操作之前最常使用的工具之一,用于确保当前工作区处于预期的状态。
10. git diff
git diff 命令用于查看工作区或暂存区中的文件改动详情。它可以显示文件中的具体更改内容,帮助开发者了解哪些部分被修改了,以及如何处理这些更改。
git diff 的常用用法
-
查看工作区的更改
-->$ git diff 作用:显示工作区中尚未暂存(未执行 git add)的改动内容。 示例输出: diff --git a/file.txt b/file.txt index e69de29..d95f3ad 100644 --- a/file.txt +++ b/file.txt @@ -1,3 +1,3 @@ Line 1 -Line 2 +Modified Line 2 Line 3 输出会显示出哪些行被添加 (+)、修改或删除 (-),帮助你查看具体的更改。
-
查看已暂存的更改
-->$ git diff --staged 或 -->$ git diff --cached作用:显示已暂存到暂存区(已执行 git add,但尚未 commit)的改动内容。
-
查看两个提交之间的更改
-->$ git diff <commit1> <commit2> 作用:显示两个提交(commit1 和 commit2)之间的差异。eg: -->$ git diff a1b2c3d e4f5g6h 这会显示从提交 a1b2c3d 到 e4f5g6h 之间的文件改动。
-
查看特定文件的更改
-->$ git diff <filename> 作用:仅显示指定文件的更改内容。 eg: -->$ git diff file.txt 这可以聚焦于特定文件的改动,尤其在项目中有很多文件被修改时非常有用。
-
查看与某个提交之间的差异
-->$ git diff <commit-hash> 作用:显示当前工作区或暂存区与指定提交之间的差异。eg: -->$ git diff HEAD 这个命令可以帮助你查看当前未提交的更改与最后一次提交(HEAD)之间的差异。
-
比较分支之间的差异
-->$ git diff <branch1>..<branch2> 作用:查看两个分支之间的差异。eg: -->$ git diff main..feature-branch 作用:这会显示 feature-branch 分支相对于 main 分支的所有改动。
常用选项:
git diff --name-only:只显示有更改的文件名称,不显示具体内容。
git diff --stat:显示更改的统计信息,如每个文件修改、添加或删除的行数。
git diff -w:忽略空白字符差异(如空格、换行符的变化),只显示实际内容变化。
总结
git diff 是一个非常强大的工具,能帮助你在提交代码之前或在代码回溯时检查具体改动。无论是工作区、暂存区还是提交之间的差异,git diff 都能以直观的方式展示细节。通过熟练掌握 git diff,你可以更好地控制代码质量和改动的准确性。