首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >结帐=‘`reset`’+‘符号参考’?

结帐=‘`reset`’+‘符号参考’?
EN

Stack Overflow用户
提问于 2017-04-12 17:36:40
回答 2查看 263关注 0票数 4

假设a_branch是一个现有的分支,它指向一个与HEAD所指向的分支不同的提交(HEAD可能直接指向一个提交,或者通过某个branch)。

以下命令是否等效?

git checkout a_branch

git symbolic-ref HEAD ref/heads/a_branch git reset --hard a_branch

另见这个相关员额

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-12 17:40:24

不,如果您在运行命令之前已经进行了或肮脏的更改,则它们不是。

如果您在运行git checkout之前修改了一个预先存在的文件,那么在移动HEAD之后,修改将持续进行。无论这些变化是阶段性的还是肮脏的,这都是事实。

在运行git reset --hard时,同样的情况不成立。当您运行git reset --hard时,这些修改,无论是分阶段的还是脏的,都将被销毁。

票数 2
EN

Stack Overflow用户

发布于 2017-04-15 12:16:14

我还想知道,git checkout (和git branch)在“管道”命令中的真正含义是什么。因此,我尝试了一个案例,其中我创建了一个新的分支,因为它只是为了学习基础知识。为了确保,我没有错过任何东西,我从零开始:

代码语言:javascript
运行
复制
Create a folder "Test" with one file "test.txt" and write  
"Great content" into that file.

使用git书中的第10章,我研究了以下顺序:

  • git init
  • git add .
  • git commit -m "Init"
  • 要么使用命令:
    • git branch b1
    • git checkout b1

  • 或管道命令:
    • git symbolic-ref HEAD
    • git update-ref refs/heads/b1 $(git rev-parse HEAD)

的结果:两者重合!

The details. I将使用以下命令检查状态:

从Git bash使用的命令:

  • find .git/refs -type f在..git/ref中找到所有文件
  • git symbolic-ref HEAD指向符号头引用,与cat .git/HEAD相同
  • git rev-parse HEAD获得历史记录(提交、对象?)头可达
  • git rev-list --objects --all查看所有提交对象
  • git cat-file -p refs/heads/master查看文件内容。 如果有不同的分支没有共同的历史,就必须使用 git rev-list --objects --no-walk $(git fsck --unreachable | grep '^unreachable commit' | cut -d' ' -f3)
  • git reflog显示一次提交和头历史记录(仅一次提交)
  • git branch -av显示带有散列和消息的所有分支(如果有任何的话,也会显示远程!)

在下面的示例中,只有当命令的结果是非空的或者它自上一步后发生了变化时,才会显示它们。

初始化Git回购

代码语言:javascript
运行
复制
git init # creates empty .git/ folder. HEAD exists but without history.

在..git/对象中没有对象。文件夹/info和/pack为空。

..git/参/空

阶段变化

代码语言:javascript
运行
复制
git add .
find .git/refs -type f # One object in c1/ created:
git cat-file -p c15479631b40176f3b09b7bc74ac5e189190e991 # yields "great content"
git cat-file -t c15479631b40176f3b09b7bc74ac5e189190e991 # yields  "blob"

因此,在refs/objects/中创建了一个对象

提交更改

代码语言:javascript
运行
复制
git commit -m "Init"
find .git/refs -type f # refs/heads/master created. Not empty. So have a look:
git symbolic-ref HEAD               # refs/heads/master
git cat-file -p refs/heads/master   # The full commit information including tree, author, commiter and commit message
git rev-parse HEAD                  # The hash to which HEAD points
git reflog                          # shows the HEAD history (just one commit)

# View all commit-objects. Everything is reachable by the commit:
git rev-list --objects --all        
git cat-file -p $(git rev-parse HEAD) # Commit Hash changes with time. -t instead of -p yields "commit"
git cat-file -p 69b13879c229e1cc35f270db248910e5a828dc65 # -t yields tree
git cat-file -p c15479631b40176f3b09b7bc74ac5e189190e991 # -t yields blob

git branch -av

创建了带有git rev-parse HEAD散列的主分支

代码语言:javascript
运行
复制
* master 7845459 Init

创建分支

代码语言:javascript
运行
复制
git update-ref refs/heads/b1 $(git rev-parse HEAD)
# refs/heads/master still there. refs/heads/b1 created. So have a look:
find .git/refs -type f
git symbolic-ref HEAD          # Still at ref/heads/master
git cat-file -p refs/heads/b1  # The same result as from "git cat-file -p refs/heads/master"

git branch -av                      

b1存在但没有签出:

代码语言:javascript
运行
复制
  b1     7845459 Init
* master 7845459 Init

结帐b1,即更新头

代码语言:javascript
运行
复制
git symbolic-ref HEAD refs/heads/b1
git symbolic-ref HEAD  # now at refs/heads/b1 => b1 checked out! Cross-check:
git branch -av

b1退房了:

代码语言:javascript
运行
复制
* b1     7845459 Init
  master 7845459 Init

希望这能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43376142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档