git指令解析

git工作区与指令

  • workspace:工作区
  • staging area:暂存区/缓存区
  • local repository:版本库或本地仓库
  • remote repository:远程仓库

git branch

分支的查看

  • git branch:查看本地分支;
  • git branch -r:查看远端分支;
  • git branch -a:查看远端+本地分支;
  • git branch -vv:此命令会列出所有本地分支,并显示每个分支对应的远程跟踪分支以及最后一次提交的信息;

分支操作

  • git branch <分支名>:创建一个本地分支;
  • git branch -m <原分支名> <新分支名>:分支重命名;
    -m 选项用于重命名本地分支。如果当前处于要重命名的分支,可以省略 <原分支名> 参数;
  • git branch -d <分支名>:-d选项用于删除已经合并到当前分支的本地分支,如果分支还有未合并的更改,Git会拒绝删除。
    该指令用于删除本地分支,删除远程分支见另一篇博客“git常用操作”

git checkout

  • git checkout <分支名>:切换分支;
  • git checkout -b <新分支名>:创建并切换到新分支;
  • git checkout -- <文件名>:
    此命令可以将指定文件恢复到最近一次提交时的状态,即丢弃工作区中对该文件的修改(不管是删除还是修改,都可用该命令来恢复,很实用!!);
  • git checkout -b <本地分支名> --track <远程仓库名>/<远程分支名>:
    该命令会创建一个新的本地分支,并将其设置为跟踪指定的远程分支;
  • git checkout <提交哈希值>:切换到指定的提交版本。该命令可以让你查看指定提交版本的文件内容,此时 HEAD 会处于分离状态。
    实例:先通过 git log 命令查看提交历史,获取某个提交的哈希值(如 123abc),然后执行:
git checkout 123abc

git fetch

git fetch 命令用于从远程仓库下载最新的提交、分支等信息到本地仓库,但不会自动合并到当前本地分支。

  • git fetch:从默认远程仓库获取更新;
  • git fetch <远程仓库名>:如果你有多个远程仓库,想要从特定的远程仓库获取更新,可以指定远程仓库的名称;
  • git fetch <远程仓库名> <远程分支名>:如果你只想获取某个特定远程分支的更新,可以在命令中指定分支名;
  • git fetch --all:如果你有多个远程仓库,想要一次性从所有远程仓库获取更新,可以使用 --all 选项;

git pull

git pull可以理解为git fetch + git merge

语法

git pull [远程仓库名] [分支名]
  • [远程仓库名] 通常是 origin,是默认的远程仓库名。
  • [分支名] 是你要合并的远程分支,比如 main 或 master。
  • 当本地分支和远程仓库分支未关联时,需要使用完整的git pull指令才能进行pull操作;否则,只需使用git pull不需要带任何参数。

实例

  • 将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并:
    git pull origin master:brantest
  • 如果远程分支是与当前分支合并,则冒号后面的部分可以省略。如下:
    git pull origin master
  • 当本地分支与远程分支未关联,直接使用git pull时,提示为:

经验

  • 使用git checkout <哈希值>进入到某一次提交状态时,再使用git log,只能看到早于这一提交之前的历史;

git push

git push 命令用于从将本地的分支版本上传到远程并合并。

语法

git push <远程主机名> <本地分支名>:<远程分支名>
  • 远程仓库名:通常是 origin,这是克隆远程仓库时 Git 默认给远程仓库起的名字。当然,你也可以有其他自定义的远程仓库名。
  • 本地分支名:你要推送的本地分支的名称。
  • 远程分支名:你要将本地分支的提交推送到的远程分支的名称。如果本地分支名和远程分支名相同,你可以省略 :<远程分支名> 部分。

注意

  • 如果本地分支名与远程分支名相同,则可以省略冒号;
git push <远程主机名> <本地分支名>
  • 如果本地分支和远程分支名字相同及已关联,直接使用git push即可,不用带任何后缀;

实例

  • 以下命令将本地的master分支推送到origin主机的master分支。
$ git push origin master

相等于:

$ git push origin master:master
  • 如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数:
git push --force origin master

--force 或 -f:强制推送。当本地分支和远程分支的提交历史有分歧时,使用该参数可以覆盖远程分支的提交历史,但这可能会导致数据丢失,使用时需谨慎。

  • 删除主机的分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支:
git push origin --delete master

git remote

git remote 指令主要用于管理 Git 仓库的远程连接,借助该指令你能够查看、添加、修改和删除远程仓库的连接信息。以下是它的常见使用场景及操作方法:

查看远程仓库信息

查看所有远程仓库

运用 git remote 命令可以查看当前仓库关联的所有远程仓库的名称。
git remote
执行此命令后,会列出所有已配置的远程仓库的名称,默认情况下通常为 origin。

查看详细信息

使用 git remote -v 命令能查看每个远程仓库的详细信息,包括对应的 URL。
git remote -v
输出结果示例如下:

origin  https://github.com/username/repo.git (fetch)
origin  https://github.com/username/repo.git (push)

添加远程仓库

当你要将本地仓库与远程仓库关联时,可使用 git remote add 命令。
git remote add <name> <url>

  • <name>:为远程仓库指定的名称,一般习惯用 origin 表示。
  • <url>:远程仓库的地址,可以是 HTTPS 或 SSH 形式的 URL。
    例如,将本地仓库与名为 myrepo 的 GitHub 仓库关联:
git remote add origin https://github.com/username/myrepo.git

修改远程仓库的 URL

若远程仓库的 URL 发生了变化,或者你需要切换到另一个 URL,可以使用 git remote set-url 命令。

git remote set-url <name> <new-url>
  • <name>:远程仓库的名称,如 origin。
  • <new-url>:新的远程仓库 URL。
    例如,将 origin 远程仓库的 URL 替换为新的地址:
git remote set-url origin https://github.com/username/new-repo.git

删除远程仓库

若不再需要与某个远程仓库保持关联,可以使用 git remote remove 或 git remote rm 命令将其删除。

git remote remove <name>
  • <name>:要删除的远程仓库的名称。
    例如,删除名为 origin 的远程仓库:
git remote remove origin

重命名远程仓库

如果你想更改远程仓库的名称,可以使用 git remote rename 命令。

git remote rename <old-name> <new-name>
  • <old-name>:远程仓库的旧名称。
  • <new-name>:远程仓库的新名称。
    例如,将 origin 重命名为 upstream:
git remote rename origin upstream

查看远程仓库的分支信息

使用 git remote show 命令可以查看某个远程仓库的详细信息,包括其分支情况。

git remote show <name>
  • <name>:远程仓库的名称,如 origin。

总结

  • git remote 命令可用于管理 Git 仓库的远程连接。
  • 能查看、添加、修改、删除和重命名远程仓库。
  • 可以查看远程仓库的详细信息和分支情况。

git restore

用于恢复工作区和暂存区的文件。

恢复工作区文件

若要把工作区的文件恢复到暂存区的状态,可以使用以下命令:
git restore <file-path>
其中, 是你想要恢复的文件路径。若要恢复多个文件,可列出多个文件路径,或者使用通配符。
示例:
假设你修改了 example.txt 文件,现在想把它恢复到暂存区的状态,可以执行以下命令:
git restore example.txt
若想恢复工作区所有文件,可以使用 . 来表示当前目录下的所有文件:

git restore .

恢复暂存区文件

若要把暂存区的文件恢复到上次提交的状态,可以使用 --staged 选项:
git restore --staged <file-path>
此命令会将指定文件从暂存区移除,但不会改变工作区的内容。
示例:
假设你已经将 example.txt 文件添加到暂存区,现在想把它从暂存区移除,恢复到上次提交的状态,可以执行以下命令:

git restore --staged example.txt

若要恢复暂存区的所有文件,可以使用 . 来表示当前目录下的所有文件:

git restore --staged .

从指定提交恢复文件

如果你想把文件从指定的提交恢复到工作区,可以使用 -s 或 --source 选项指定提交的哈希值或引用:
git restore -s <commit-hash> <file-path>
这里的 是你想要从哪个提交恢复文件的哈希值, 是要恢复的文件路径。
示例:
假设你想要把 example.txt 文件从提交 abc123 恢复到工作区,可以执行以下命令:

git restore -s abc123 example.txt

同时恢复工作区和暂存区的文件

若要同时把工作区和暂存区的文件恢复到指定提交的状态,可以结合 --source 和 --staged 选项:

git restore --source <commit-hash> --staged --worktree <file-path>

其中, 是指定提交的哈希值, 是要恢复的文件路径。
示例:
假设你想要把 example.txt 文件的工作区和暂存区都恢复到提交 abc123 的状态,可以执行以下命令:

git restore --source abc123 --staged --worktree example.txt

git revert

git revert 用于撤销指定的提交,它会创建一个新的提交来抵消指定提交所做的更改,而不是直接删除提交历史。这种方式在多人协作开发中非常有用,因为它不会破坏已经存在的提交历史。以下是 git revert 的常见使用场景和具体操作方法:

撤销单个提交

若要撤销单个提交,可以使用以下命令:
git revert <commit-hash>
其中, 是你想要撤销的提交的哈希值。你可以通过 git log 命令查看提交历史并获取该哈希值。
示例:
假设你有如下的提交历史:
A <- B <- C <- D (HEAD, master)
你想要撤销提交 C,可以先通过 git log 找到提交 C 的哈希值,假设为 abc123,然后执行以下命令:
git revert abc123
执行该命令后,Git 会创建一个新的提交 E,它的内容与提交 C 相反,从而达到撤销的目的。提交历史变为:

A <- B <- C <- D <- E (HEAD, master)

撤销多个连续的提交

如果你想撤销多个连续的提交,可以使用范围表示法。例如,要撤销从提交 C 到提交 D 的所有更改,可以使用以下命令:
git revert <start-commit-hash>..<end-commit-hash>
其中, 是起始提交的哈希值, 是结束提交的哈希值。注意,这里的范围是左开右闭的,即不包括 对应的提交。
示例:
假设提交历史如下:

A <- B <- C <- D <- E (HEAD, master)

你想要撤销提交 C 到提交 E 的所有更改,可以先通过 git log 找到提交 C 和提交 E 的哈希值,假设分别为 abc123 和 def456,然后执行以下命令:
git revert abc123..def456
执行该命令后,Git 会依次创建新的提交来撤销每个提交的更改。

git reset

git reset 命令用于撤销commit。

语法格式如下:

git reset [--soft | --mixed | --hard] [HEAD]

git log

git log 命令用于查看 Git 仓库中提交历史记录,显示从最新提交到最早提交的所有提交信息,包括提交的哈希值、作者、提交日期和提交消息等。

基本语法:

git log [选项] [分支名/提交哈希]

常用的选项包括:

  • -p:显示提交的补丁(具体更改内容)。
  • --oneline:以简洁的一行格式显示提交信息。
  • --graph:以图形化方式显示分支和合并历史。
  • --decorate:显示分支和标签指向的提交。
  • --author=<作者>:只显示特定作者的提交。
  • --since=<时间>:只显示指定时间之后的提交。
  • --until=<时间>:只显示指定时间之前的提交。
  • --grep=<模式>:只显示包含指定模式的提交消息。
  • --no-merges:不显示合并提交。
  • --stat:显示简略统计信息,包括修改的文件和行数。
  • --abbrev-commit:使用短提交哈希值。
  • --pretty=<格式>:使用自定义的提交信息显示格式。

实例

  • 比方说我们要找 Git 源码中 Linus 提交的部分:
    $ git log --author=Linus --oneline -5
  • 如果我要看 Git 项目中三周前且在四月十八日之后的所有提交,我可以执行这个(我还用了 --no-merges 选项以隐藏合并提交):
    $ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
  • 显示最近的 5 次提交:
    git log -n 5
  • 显示自指定日期之后的提交:
    git log --since="2024-01-01"
  • 显示指定日期之前的提交:
    git log --until="2024-07-01"
  • 只显示某个作者的提交:
    git log --author="Author Name"
  • 查看远程分支的提交情况
    git log origin/remote_different_branch
    使用场景:
    1.在合并之前,你可能想先查看远程分支有哪些新的提交,再决定是否要合并。此时可以先执行git fetch
    git fetch origin remote_different_branch
    2.然后使用git log等命令查看远程分支的更新情况:
    git log origin/remote_different_branch
    3.确认无误后,再手动执行合并操作:
    git merge origin/remote_different_branch
posted @ 2025-03-08 11:24  MKYC  阅读(60)  评论(0)    收藏  举报