Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 忘记使用Git移动到master以外的其他分支_Ruby On Rails_Git - Fatal编程技术网

Ruby on rails 忘记使用Git移动到master以外的其他分支

Ruby on rails 忘记使用Git移动到master以外的其他分支,ruby-on-rails,git,Ruby On Rails,Git,我在rails项目中使用了Git 今天我做了很多更改,但我忘记了移动到另一个分支,因此所有这些更改都在主分支中,但尚未提交 这是我执行git status命令时得到的结果: # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..."

我在rails项目中使用了
Git

今天我做了很多更改,但我忘记了移动到另一个分支,因此所有这些更改都在主分支中,但尚未提交

这是我执行
git status
命令时得到的结果:

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   app/controllers/sessions_controller.rb
#   modified:   app/controllers/users_controller.rb
#   modified:   app/helpers/sessions_helper.rb
#   modified:   app/models/user.rb
# .....

#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   app/assets/javascripts/password_resets.js.coffee
#   app/assets/stylesheets/password_resets.css.scss
#   app/controllers/password_resets_controller.rb
# .....
# ......
no changes added to commit (use "git add" and/or "git commit -a")
分支主机上的
#
#未为提交而暂存的更改:
#(使用“git add…”更新将提交的内容)
#(使用“git签出--…”放弃工作目录中的更改)
#
#修改:app/controllers/sessions\u controller.rb
#修改:app/controllers/users\u controller.rb
#修改:app/helpers/sessions\u helper.rb
#修改:app/models/user.rb
# .....
#
#未跟踪的文件:
#(使用“git add…”包含在将提交的内容中)
#
#app/assets/javascripts/password\u resets.js.coffee
#app/assets/stylesheets/password_resets.css.scss
#app/controllers/password_resets_controller.rb
# .....
# ......
未向提交添加任何更改(使用“git add”和/或“git commit-a”)

如何解决此错误并将所有这些未跟踪的文件从master移动到已存在的另一个分支?谢谢。

只需创建一个新分支,然后提交,例如:

git checkout -b my_branch
git commit -am "My commit."

只需创建一个新分支,然后提交,例如:

git checkout -b my_branch
git commit -am "My commit."

您只需要创建新的分支

创建分支后,所有更改都将位于新分支中

然后从主人那里清理你的旧东西

// Checkout new branch
git checkout -b my_branch

// Prepare files for commit
git add .

// Commit changes
git commit -m "Your commit message"

// delete the dirty master
git branch -D master

// Now we are going to clean your changes from the master branch
// the -f is important in case you skipped the previous command to delete your master
git checkout -f master 

您只需要创建新的分支

创建分支后,所有更改都将位于新分支中

然后从主人那里清理你的旧东西

// Checkout new branch
git checkout -b my_branch

// Prepare files for commit
git add .

// Commit changes
git commit -m "Your commit message"

// delete the dirty master
git branch -D master

// Now we are going to clean your changes from the master branch
// the -f is important in case you skipped the previous command to delete your master
git checkout -f master 
如果没有以下标记为C1、C2等的提交 你的情况很简单;就用吧

如果有跟踪分支 您更新的问题/评论表明您既有已提交的更改,也有未提交的更改,并且都是在某个跟踪分支上完成的,例如跟踪
源代码/master
master
或跟踪
源代码/devel
devel
,但您尚未推送任何更改。(我假设
master
,但您可以将每个
master
更改为下面的特性/开发/任何分支名称。)

作为一个图表,您的repo的提交树和工作目录/索引现在如下所示:

M1 -...- M5 -- M6                    <-- origin/master
                 \
                  C1 -- C2           <-- master, HEAD=master
                          \
                           i, w      <-- "index" and working-tree files
97206f5 peerish: set socket options earlier
4881af5 add semtest.c
b3f8bea fdm: repair example
请记住,分支标签类似于便签(“黄色便签”或“Post It®便签”或其他内容):它们上面写有名称,并粘贴到提交上。因此,您需要做的是添加一个新的便签,
my_branch
,指向commit C2,并使
HEAD
引用新的分支名称:

git checkout -b my_branch
这使用前面的
HEAD
值来命名粘贴到
my_分支的提交。由于提交是
C2
,您现在在这里既有
master
又有
my_分支
。然后它重写
HEAD
以指向名称
myu分支机构
。现在你有:

M1 -...- M5 -- M6                    <-- origin/master
                 \
                  C1 -- C2           <-- master, my_branch, HEAD=my_branch
                          \
                           i, w      <-- "index" and working-tree files
-f
(force)标志告诉
git branch
更改现有的便笺,而不是因为它存在而失败,并且
origin/master
给出提交
master
应该指向的内容:因此git将标签从
C2
上剥下并粘贴到
M6
,您就拥有了想要的设置(第二张图)


小结:只有两个命令:

git checkout -b my_branch           # create new branch and change HEAD
git branch -f master origin/master  # restore master to origin/master
现在,您可以像往常一样在分支
my_branch
git add
git rm
git commit
)上签入更改,这将根据需要添加新的提交C3:

M1 -...- M5 -- M6                    <-- master, origin/master
                 \
                  C1 -- C2 -- C3     <-- my_branch, HEAD=my_branch
其中,数字是缩写的SHA-1,文本是提交消息的第一行。由于日志以相反的顺序显示,顶行是最近的提交(
C2
,在上面的示例中),然后每一行是下一行(合并更复杂,但足够接近)

假设从上面可以看出,我标记为
M6
的提交是
b3f8bea
,即需要跳过两次提交。只需将该值作为最后一个参数提供给
git branch

git branch -f master origin/master
git branch -f master b3f8bea
如果你的回购协议很大而且很旧,或者有很多合并提交,你可能希望你的日志包含更多的“装饰”。我从很久以前的某个地方得到了这些别名:

[alias]
    lol = git log --graph --decorate --oneline
    lola = git log --graph --decorate --oneline --all
这样我就可以运行
git-lol
git-lola

或者,如果您确实知道有两次提交,
master~2
(在本例中,在添加
my_branch
my_branch~2
)后,您将得到相同的SHA-1.在我这里的一次回购中,
HEAD~2
origin/featureX
相同:

$ git rev-parse HEAD~2
0f5a13497dd3da8aff8e452c8f56630f83253e79
$ git rev-parse origin/featureX
0f5a13497dd3da8aff8e452c8f56630f83253e79
但通常情况下,
git log
(或
git lol
等)将获得原始SHA-1,您可以根据需要从那里添加标签。

如果下面没有标记为C1、C2等的提交 你是在简单的情况下,只是使用

如果有跟踪分支 您更新的问题/评论表明您既有已提交的更改,也有未提交的更改,并且都是在某个跟踪分支上完成的,例如跟踪
源代码/master
master
或跟踪
源代码/devel
devel
,但您尚未推送任何更改。(我假设
master
,但您可以将每个
master
更改为下面的特性/开发/任何分支名称。)

作为一个图表,您的repo的提交树和工作目录/索引现在如下所示:

M1 -...- M5 -- M6                    <-- origin/master
                 \
                  C1 -- C2           <-- master, HEAD=master
                          \
                           i, w      <-- "index" and working-tree files
97206f5 peerish: set socket options earlier
4881af5 add semtest.c
b3f8bea fdm: repair example
请记住,分支标签就像便笺(“黄色胶粘条”或“Post-It®便笺”或其他任何东西):它们上面写有名称并粘贴到提交上。因此,您需要做的是添加一个新的便笺,
my_branch
,指向提交C2,并制作
HEAD