Post

Git进阶一

intro.png

git 常见命令补充

  1. git status 查看分支(在远程分支origin/main的后几个commit)、文件状态(untraked 还是 to be committed)

  2. git log 查看提交历史

  3. git log -n 2 --oneline:-n 2显示最近的2次提交,--oneline是格式化选项,将每个提交的输出限制为一行,只显示提交哈希和提交消息

  4. git log -n 1 --oneline: 显示当前HEAD指针指向的提交

    1
    2
    3
    4
    
     (base) PS C:\Users\yuy4o\Desktop\sourcetree> git log -n 3 --oneline
     4e4d1cb (HEAD -> main) 3
     5de4eb3 2
     b71dd2d (origin/main) 1
    
  5. git commit --amend -m "..." 修改提交信息

  6. git commit --date="Aug 19 21:05:20 2024 +0800" -am "lidf" 自定义提交日期时间

git add 回滚

git add <filename> 后跟踪文件位于暂存区

  • git restore --stage <filename> 跟踪文件从暂存区回退到未暂存区

git commit 回滚

git commit -m "..." 后跟踪文件位于版本库

  • git reset --soft HEAD^ 跟踪文件从版本库回退到暂存区

  • git reset --mixed HEAD^ 跟踪文件从版本库回退到未暂存区

  • git reset --hard HEAD^HEAD移到指定的提交,丢弃版本库本地目录中的所有更改

  • 疑问:直接执行git reset 怎么回退

这里的 HEAD^ 表示要将 HEAD 移动到前一次提交。你也可以使用具体的提交哈希值(git reset --mixed b71d)或者分支名作为目标

疑问

问1:git中分支 origin/main和main什么区别

答1:在Git中,origin/main 和 main 通常表示远程仓库和本地仓库中的分支。以下是它们的一些基本区别:

origin/main: origin 是默认的远程仓库名称,通常指向项目的中央仓库(例如 GitHub 或 GitLab)。 origin/main 表示远程仓库中的 main 分支。在一些仓库中,main 可能被命名为 master 或其他名称,具体取决于项目的设置。

main: main 表示本地仓库中的分支,是你当前所在的工作分支。这是你正在本地工作的分支,可以进行修改、提交等操作。 main 可以与远程仓库的分支同步,例如,你可以将本地的 main 推送到远程的 origin/main。 通常情况下,你在本地仓库上执行的操作(例如创建、修改、合并分支等)是在 main 分支上进行的。当你需要与远程仓库同步时,你会使用 git pull 或 git push,这会涉及到与远程仓库的分支进行交互,如 origin/main。

总的来说,origin/main 是远程仓库中的 main 分支,而 main 是你本地仓库中的 main 分支。在正常的工作流程中,你会在本地的 main 上进行工作,然后将其推送到远程仓库的 origin/main 分支。

1
2
3
4
5
6
7
# 当前HEAD指针指向分支main,本地分支 main 和远程分支 origin/main 一致
(base) PS C:\Users\yuy4o\Desktop\sourcetree> git log
commit b71dd2dc03370be80b4c7abafcce341d71ef0d85 (HEAD -> main, origin/main)
Author: yuy4o <yuyao.jiang22@gmail.com>
Date:   Sat Dec 2 11:57:12 2023 +0800

    1

问2:git中分支和head什么区别

答2:在Git中,分支(Branch)和 HEAD 是两个关键的概念,它们用于管理代码库的版本和状态。

分支(Branch):

分支是指代码库中的一个独立的、可独立发展的线索。通过创建分支,你可以在不影响主要代码线的情况下开发新功能、修复错误等。 每个分支都包含了代码库的完整历史记录。当你创建一个新分支时,它会包含当前分支的所有提交历史。在新分支上的任何提交都会影响该分支的历史,而不会影响其他分支的历史。分支的切换通过 git checkout 或 git switch 命令来实现。例如,你可以创建一个新分支并在该分支上进行开发:git checkout -b feature-branch

HEAD:

HEAD 是一个特殊的指针,它指向当前所在的分支或提交(commit)。HEAD 通常指向当前工作目录所在的分支的最新提交。 当你在Git中进行提交时,HEAD 将会移动到最新的提交,反映了当前的工作状态。 如果你切换分支,HEAD 将会随之移动到新的分支。HEAD 的移动代表了当前工作目录所处的状态。 例如,当你在主分支上时,HEAD 可能指向主分支的最新提交:

1
2
3
4
5
6
7
8
9
10
11
A---B---C (main)
    ^
    HEAD

切换到新创建的分支,HEAD 将移动到该分支的最新提交:

A---B---C (main)
    \
     D (feature-branch)
     ^
     HEAD

总的来说,分支是一种逻辑上的隔离,让你可以在不影响主要代码线的情况下进行开发。HEAD 则是一个指针,指向当前工作目录所在的分支或提交,反映了当前工作状态。通过使用这两个概念,你可以在Git中方便地进行代码的版本控制和管理。

附录

推荐使用Sourcetree,方便高效。还有文件中只暂存行的功能

sourcetree.png

学习链接

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.