我对git相对较新,并且在早期遇到一些问题。我做了几次提交,但是当我尝试推送它们时,我得到一个回复,说明一切都是最新的。我觉得我的问题与this question中列出的问题相同,但建议如下:
$ git log -1
# note the SHA-1 of latest commit
$ git checkout master
# reset your branch head to your previously detached commit
$ git reset --hard <commit-id>
“检查主人”究竟会做什么?我只是不想失去我所做的改变......
gitk的截图:
答案 0 :(得分:4)
检出分支会移动本地HEAD
指针,使其指向分支引用的同一提交。例如:
当在分支mybranch
上时(C
s是提交):
HEAD
|
V
master mybranch
| |
V V
C1 -------> C2 -------> C3
运行git checkout master
后:
HEAD
|
V
master mybranch
| |
V V
C1 -------> C2 -------> C3
这也会根据需要移动工作目录中的文件,这样就可以很好地了解项目在该提交时的样子。它不会删除或更改提交,因此您不会通过签出另一个分支来丢失一个分支中的工作。
在另一个问题中描述的“分离头”的情况下发生的事情是C3
与分支无关。为了解决这个问题,您需要更新master
分支指向的提交,以便它包含新内容(C3
)。签出master
告诉git你现在正在使用master分支,然后使用你想要的提交的SHA1做一个很难的reset
。您的master
分支更新了您想要的分支引用。
修改强>
在这种情况下,分离头不是问题。请记住,在git中提交和推送是两个不同的东西。提交不像Subversion中那样与中央存储库通信。对工作目录进行更改后,对每个已更改的文件运行git add filename
一次,其中filename
是文件的名称。将所有文件添加到索引后,您可以使用git commit
提交它们。
这方面的简写是使用git commit -a
,它会在提交之前自动将修改后的文件添加到索引中。这允许您跳过git add
步骤。请注意,git commit -a
只会添加已修改的文件。如果您要引入一个从未提交过的新文件,则必须使用git add
手动添加该文件。
完成提交后,您可以运行git push
将该提交发送到远程存储库并更新远程分支。这只是远程通信的东西。与Subversion不同,提交本身是在本地处理的,不需要与服务器进行任何交互。
答案 1 :(得分:-1)
git checkout master
是将您的工作区域切换为 主 分支,也称为 主干 在其他版本控制系统中。