只有积攒上演git的变化 - 这可能吗?(Stashing only staged changes

2019-08-16 19:55发布

有没有一种方法可以让我藏匿只是我上演的变化? 我遇到问题的情况是,当我在一个给定的时间上了几个错误的工作,并且有几个不分级的变化。 我希望能够单独阶段,这些文件,创建我的.patch文件,并藏匿他们离开,直到代码被批准。 这样一来,当它的批准,我可以藏我的整个(当前)会议上,弹出这个bug,推动代码。

我要对这个错误的方式? 我误解混帐如何可以通过其他方式来简化我的工作流程?

Answer 1:

是的,这是真的有可能,相信与否,DOUBLE STASH:

  1. 阶段的所有文件,你需要藏匿。
  2. 运行git stash --keep-index 。 此命令将创建与您的所有更改藏匿( 演出和未分级 ),但会留在你的工作目录中的阶段性变化(仍在上演的状态)。
  3. 运行git stash save "good stash"
  4. 现在你的"good stash" 只上演文件

现在,如果你之前藏匿需要不分阶段的文件,简单地套用第一藏匿( 与创建的--keep-index ),现在你可以删除你藏到文件"good stash"

请享用



Answer 2:

随着最新的git你可以使用--patch选项

git stash push --patch

和Git会问你在你的文件添加或不进藏匿每一个变化。 你刚才回答yn



Answer 3:

我做只是藏匿什么是目前演出和叶子一切的脚本。 当我开始做了太多不相关的变化这是真棒。 只需提交阶段什么是不相关的期望,并藏匿了这一点。

(感谢巴特洛梅耶为起点)

#!/bin/bash

#Stash everything temporarily.  Keep staged files, discard everything else after stashing.
git stash --keep-index

#Stash everything that remains (only the staged files should remain)  This is the stash we want to keep, so give it a name.
git stash save "$1"

#Apply the original stash to get us back to where we started.
git stash apply stash@{1}

#Create a temporary patch to reverse the originally staged changes and apply it
git stash show -p | git apply -R

#Delete the temporary stash
git stash drop stash@{1}


Answer 4:

你为什么不承诺一定缺陷的变化,并创建一个补丁,提交和它的前身?

# hackhackhack, fix two unrelated bugs
git add -p                   # add hunks of first bug
git commit -m 'fix bug #123' # create commit #1
git add -p                   # add hunks of second bug
git commit -m 'fix bug #321' # create commit #2

然后,要创建相应的补丁程序,使用git format-patch

git format-patch HEAD^^

这将创建两个文件: 0001-fix-bug-123.patch0002-fix-bug-321.patch

或者你可以为每个错误单独的分支,让你可以合并或单独衍合bug修复,甚至删除他们,如果他们不工作了。



Answer 5:

在这种情况下,我更愿意为每一个问题的新分支。 我用一个前缀温度/所以我知道,我以后可以删除这些分支。

git checkout -b temp/bug1

舞台是固定bug1并提交他们的文件。

git checkout -b temp/bug2

然后,您可以挑选樱桃从各自的分支机构需要和提交pull请求的提交。



Answer 6:

为了实现同样的事情...

  1. 阶段,你想工作的文件。
  2. git commit -m 'temp'
  3. git add .
  4. git stash
  5. git reset HEAD~1

繁荣。 你不想要的文件藏起来。 你想要的文件都准备好了。



Answer 7:

它是绝对必要同时对几个bug工作? 并通过“一次,”我的意思是“有编辑在同一时间多个错误的文件。” 因为除非你绝对需要的是,我只上一个错误在你的环境中的时间工作。 这样,你可以使用本地的分支机构及重订,我觉得这远比管理复杂藏匿/阶段更容易。

比方说,主在提交B.现在,在错误1#工作。

git checkout -b bug1

现在你的分支bug1。 做一些修改,提交,等待代码审查。 这是本地的,这样你就不会影响到其他人,这应该是很容易实现从混帐的diff补丁。

A-B < master
   \
    C < bug1

现在你的工作BUG2。 回去跟掌握git checkout master 。 创建一个新的分支, git checkout -b bug2 。 进行更改,提交,等待代码审查。

    D < bug2
   /
A-B < master
   \
    C < bug1

让我们假设别人犯E和F在主,而你在审核等待。

    D < bug2
   /
A-B-E-F < master
   \
    C < bug1

当你的代码已经被批准,你可以变基其上通过以下步骤掌握:

git checkout bug1
git rebase master
git checkout master
git merge bug1

这将导致如下:

    D < bug2
   /
A-B-E-F-C' < master, bug1

然后你就可以推,删除本地bug1分支,和您去。 在同一时间在您的工作,但使用当地的分支机构你的资料库可以处理多个错误的一个错误。 这避免了复杂的舞台/藏匿舞蹈。

答案在评论ctote的问题:

好了,你可以回去积攒每一个错误,只有用一个错误的时间工作。 ATLEAST,节省您的分期问题。 不过话说试过这个,我个人觉得麻烦。 藏匿在一个git数图有点乱。 更重要的是,如果你搞砸了的东西,你无法恢复。 如果你有一个肮脏的工作目录,你去藏匿,你不能“撤消”是流行音乐。 这是更难搞砸了现有的提交。

所以git rebase -i

在衍合的一个分支到另一个,你可以做交互(-i标志)。 当你这样做,你必须选择你想每次提交做什么的选项。 临Git是一个真棒书,这也是在网上HTML格式,以及对基础重建和挤压一个很好的部分:

http://git-scm.com/book/ch6-4.html

我会逐字偷为了方便他们的榜样。 假设你有以下提交历史,你想变基&壁球bug1到主:

    F < bug2
   /
A-B-G-H < master
   \
    C-D-E < bug1

下面是当你输入你会看到什么git rebase -i master bug1

pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added cat-file
#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

壁球分支下的所有提交到一个单一的提交,保留第一次提交的“选择”,并以“南瓜”,或简称“S”替换所有后续的“挑”的条目。 你会得到改变提交信息的机会了。

pick f7f3f6d changed my name a bit
s 310154e updated README formatting and added blame
s a5f4a0d added cat-file
#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit

所以呀,挤压是一个有点痛,但我还是推荐在大量使用藏匿的。



Answer 8:

出你的意见,迈克Monkiewicz答案,我建议使用一个简单的模型:使用常规的发展分支,但使用该合并的南瓜选项来获得你的主分支合并为单一提交:

git checkout -b bug1    # create the development branch
* hack hack hack *      # do some work
git commit
* hack hack hack *
git commit
* hack hack hack *
git commit
* hack hack hack *
git commit
git checkout master     # go back to the master branch
git merge --squash bug1 # merge the work back
git commit              # commit the merge (don't forget
                        #    to change the default commit message)
git branch -D bug1      # remove the development branch

该方法的优点是,你可以使用普通的Git工作流程。



文章来源: Stashing only staged changes in git - is it possible?
标签: git git-stash