Git结账,不会丢失工作树

时间:2014-01-15 13:25:44

标签: git

假设我在master分支中有很多提交。

  

Sha1 1st commit

     

Sha2第二次提交

     

Sha3 3rd commit

     

Sha4 4th commit HEAD

假设我想通过使用git checkout sha2移动(只是为了环顾四周并进行一些轻微修改)到第二次提交,我现在能够看到第二次提交中的内容,但是我将失去对Sha3和Sha4,尽管他们还在那里。事实上,如果我发出git log,则只显示第一次和第二次提交。然后,如果我发出git checkout master,我将再次移动到第4次提交。 当HEAD处于第二次提交时,有没有办法在deatached HEAD模式下跟踪Sha3和Sha4(没有注意到它们)?

6 个答案:

答案 0 :(得分:2)

你已经在Sha4获得了master的提示,所以你仍然可以通过说

来看Sha3和Sha4
    git log master

......即使你在Sha2处于一个独立的HEAD状态。

答案 1 :(得分:1)

即使您没有签出主控,也可以使用git log master查看所有提交。

% git log --oneline                          
ec3541a 4th commit
b3febbf 3rd commit
3bbabce 2nd commit
3467bdc 1st commit
% git checkout 3bbabce                       
Note: checking out '3bbabce'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 3bbabce... 2nd commit
% git log --oneline                          
3bbabce 2nd commit
3467bdc 1st commit
% git log --oneline master                   
ec3541a 4th commit
b3febbf 3rd commit
3bbabce 2nd commit
3467bdc 1st commit

答案 2 :(得分:1)

一种方法是在签出sha2之前通过git tag temp sha3等标记它们。另一个是在签出sha2之后查看master的日志,例如通过git log master --oneline

答案 3 :(得分:0)

如果您想查看先前提交中的代码,只需签出分支

即可
git checkout -b just_looking sha2

现在,您可以查看此新分支中的代码,并且原始分支未受到影响。

如果进行任何更改,可以将它们与原始分支合并。

答案 4 :(得分:0)

另一种方法是使用reflog,它记录了哪些提交已经签出。

$ git rev-parse HEAD
65ca752aa18d6cd24196b5ba0fd6f53af49f8c56
$ git checkout HEAD~2
Previous HEAD position was 65ca752... 4th commit
HEAD is now at a59b854... 2nd commit
$ git rev-parse HEAD
a59b8545cf1aa013cf87b9946e738e0add1f4536
$ git checkout HEAD@{1}
Previous HEAD position was a59b854... 2nd commit
HEAD is now at 65ca752... 4th commit
$ git rev-parse HEAD
65ca752aa18d6cd24196b5ba0fd6f53af49f8c56

注意:虽然这会让你回到之前检查过的同一个提交,但你最终会分开头而不是分支。因为看起来你正在寻找一种方法来引用提交而不是回到分支的尖端(因为那时解决方案将是微不足道的; git checkout some-branch-name)。

答案 5 :(得分:0)

我总是使用下一个选项运行git log,这为我提供了全面的信息

git log --graph --all --decorate