小智 79
这应该做的伎俩:
git reset --hard HEAD
git pull
Run Code Online (Sandbox Code Playgroud)
jwg*_*jwg 31
git fetch
git checkout origin/name_of_branch # correct state but in 'head without a name'
git checkout -B name_of_branch # overwrite current tree onto name_of_branch
Run Code Online (Sandbox Code Playgroud)
这会将远程跟踪分支检查到没有名称的头部,然后您可以查看并检查您是否满意.无论何时你想要(甚至在更改或提交之后)第二个git checkout都会用'name_of_branch'标记当前树,即使它必须删除旧的name_of_branch来执行此操作.
git命令的语法似乎不直观.事实上,这是Git数据模型不直观.这是一个不错的设计,但因为它可以与文件,分支机构一起使用,其提交方式比其他版本控制系统更灵活,更强大.一旦你了解这些东西在Git中是如何工作的,命令行就会很有意义,你将能够准确地猜出如何做复杂的事情.
git fetch
这将获取origin自上次以来服务器上发生的所有更新.Git将从服务器获取的内容与更新,合并等任何分支进行分离.所有被调用的分支origin/XXX都是您服务器上最新版本的分支.它们不是远程分支,而是远程跟踪分支,跟踪远程分支的本地分支.当你这样做时git fetch,你更新它们,而不涉及任何你自己的分支.当您这样做git merge时git rebase,等等,您使用获取的版本,而不从服务器获取更新的副本.这意味着您可以控制何时发出网络请求(如果您并不总是连接到服务器),并且可以"获取"服务器的快照,然后随意合并.如果有疑问,git fetch请先做.git checkout origin/name_of_branch
git checkout做两件事.它将您的文件更新到该分支,并将您设置HEAD为该分支.文件的东西是你所期望的.该HEAD事物的意思是,当你做承诺,他们将加入到该分支的末端HEAD指向.IOW,checkout两者都输出 - 编写正确版本的文件,并准备输入 - 准备好存储您将在正确的位置执行的提交.如果您签出一个被调用的分支foo,您的树将更改为保存的状态foo,并且您将执行的下一个提交将被添加到foo.在这种情况下origin\xyz,您无法将更改写入origin分支 - 这些更改跟踪origin服务器上的内容并且无法直接提交.因此,结帐更新文件,并设置HEAD为空 - 一个未命名的分支.这会阻止您意外地将新签出的内容提交回您正在使用的上一个分支,事实上,在您拥有目标分支之前,git会严重劝阻您.git checkout -B name_of_branch
像往常一样,当git使用一个命令执行两个不同的操作时,它们都可以单独配置.因此,如果使用该选项checkout,设置HEAD到您要提交的分支的第二部分可以是新分支,而不是您要检出的分支-B.因此,git checkout -B new_stuff old_stuff将所有文件设置为状态old_stuff,但准备好将提交写入新分支new_stuff.这是一项常见任务,可以分两步保存您检出分支然后分叉.现在,几乎所有git命令的参数都可以省略,而git将做最明显的事情.在这种情况下,这是基于您所在的分支而不是您想要结帐的分支.所以git接受你所在的未命名分支,并创建一个新的分支name_of_branch,你可以开始提交.请注意,一个案例字母"B"表示"强制".如果你使用"-b"git会拒绝覆盖已经存在的分支.使用"-B"它将继续执行而不会发出警告或确认.ant*_*tak 11
最好的,下意识的解决方案是:git reset --hard origin/master
这是专家和初学者的全能解决方案,可以迅速完成工作. 虽然在没有警告的情况下吹走所有未提交的更改.
在更安全的命令是稍微一个痛苦的类型:git checkout -B master origin/master
git config --global alias.become '!git checkout -B "$(git symbolic-ref --short HEAD)"'
Run Code Online (Sandbox Code Playgroud)
从此以后,可以输入: git become origin/master
| 归档时间: |
|
| 查看次数: |
63586 次 |
| 最近记录: |