我开始研究一个新特性,在编码了一段时间后,我决定这个特性应该属于自己的分支。

如何将现有未提交的更改移动到新分支并重置当前分支?

我想重置当前分支,同时保留新功能的现有工作。


当前回答

如果你提交了它,你也可以选择一个提交ID。当我开始在master中工作时,我经常这样做,然后想在我推到origin/之前创建一个本地分支。

git cherry-pick <commitID>

正如这里所描述的,你可以用樱桃树做很多事情,但这可能是你的一个用例。

其他回答

我使用@Robin回答并列出我所做的一切,

git status                               <-- review/list uncommitted changes
git stash                                <-- stash uncommitted changes
git stash branch <new-branch> stash@{1}  <-- create a branch from stash
git add .                                <-- add local changes
git status                               <-- review the status; ready to commit
git commit -m "local changes ..."        <-- commit the changes
git branch --list                        <-- see list of branches incl the one created above
git status                               <-- nothing to commit, working tree (new-branch) is clean
git checkout <old-branch>                <-- switch back

! 如果回购有多个存储,请查看要应用于新分支机构的存储:

git stash list  
  stash@{0}: WIP on ...  
  stash@{1}: WIP on ...

并通过以下方式检查各个藏匿点,

git stash show stash@{1}

或者立即检查所有储藏物:

git stash list -p

您还可以创建bash别名来完成所有这些操作。

这将创建新命令。。。

gitco<branch>-检查指定的分支,并随身携带当前的更改gitconew<new branch name>-使用指定的名称(从master分支)创建一个新的分支,并将当前的更改记录在其中

以下是设置别名的步骤。。。

将以下内容添加到~/.bash_profile

gitco ()
{
  git stash && git checkout $1 && git stash apply
}

gitconew ()
{
  git stash && git checkout master && git checkout -b $1 && git stash apply
}

运行source~/.bash_profile以重新加载配置文件

现在您可以运行gitco和gitconew别名命令了。

以下是有关bash别名的更多信息->https://linuxize.com/post/how-to-create-bash-aliases/

提交更改的3个步骤

假设您在GitHub上创建了一个名为featurebranch的新分支。

提取

    git pull --all         Pull all remote branches
    git branch -a          List all branches now

检出并切换到要素分支目录。您可以简单地从上面的branch-a命令的输出中复制分支名称

git checkout-b功能分支

验证

接下来使用gitbranch命令查看当前分支。它将显示前面带有*的功能分支

git branch         

承诺

git add .   add all files
git commit -m "Rafactore code or use your message"

在源服务器上进行更新和推送更改

 git pull origin feature-branch
 git push origin feature-branch

如果您在编码时一直在主分支上进行提交,但现在希望将这些提交移到另一个分支,这是一种快速方法:

将当前历史记录复制到一个新的分支上,同时带来任何未提交的更改:git checkout-b<新功能分支>现在强制原始的“杂乱”分支回滚:(不切换到它)git分支-f<上一个分支><早期提交id>例如:git branch-f master原始/主或者如果您已经提交了4次:git分支-f主HEAD~4

警告:gitbranch-f master origin/master将重置该分支的跟踪信息。因此,如果您已将主分支配置为推送到源/主分支以外的其他位置,则该配置将丢失。

警告:如果在分支后重新创建基,则可能会丢失一些提交,这在这里进行了描述。避免这种情况的唯一方法是使用樱桃树创造新的历史。该链接描述了最安全的防傻瓜方法,尽管不太方便。(如果您有未提交的更改,您可能需要在开始时使用git stash,在结束时使用gitstash pop。)

更新2020/Git 2.23

Git 2.23添加了新的switch子命令,试图消除由于超负荷使用checkout(切换分支、恢复文件、分离HEAD等)而产生的一些混乱

从这个版本的Git开始,将checkout命令替换为:

git switch -c <new-branch>

行为相同且保持不变。


更新2020/Git 2.23之前

使用以下方法:

git checkout -b <new-branch>

这将使当前分支保持原样,创建并签出新分支并保留所有更改。然后,您可以在文件中暂存要提交的更改:

git add <files>

并向您的新分支机构承诺:

git commit -m "<Brief description of this commit>"

工作目录中的更改和索引中暂存的更改尚不属于任何分支。这将更改这些修改将结束的分支。

您不重置原始分支,它保持原样。<old branch>上的最后一次提交仍将保持不变。因此,您签出-b,然后提交。