Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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
Git命令执行拉操作并将更改放在顶部而不隐藏?_Git_Git Stash - Fatal编程技术网

Git命令执行拉操作并将更改放在顶部而不隐藏?

Git命令执行拉操作并将更改放在顶部而不隐藏?,git,git-stash,Git,Git Stash,每次我必须从回购协议中获得最新的变更,我必须先保存变更,然后进行拉取,然后再次取消发布变更,当有很多人在项目中工作时,这个过程会变得非常乏味,而你每天都要这么做很多次 我想知道是否有一个git命令可以做到这一点 您可以编写shell别名或git命令别名来执行此操作 [alias] update = !git stash save -u && git pull && git stash pop 我在那里抛出了-u,以隐藏未跟踪的文件,以防拉操作添加这些文件

每次我必须从回购协议中获得最新的变更,我必须先保存变更,然后进行拉取,然后再次取消发布变更,当有很多人在项目中工作时,这个过程会变得非常乏味,而你每天都要这么做很多次


我想知道是否有一个git命令可以做到这一点

您可以编写shell别名或git命令别名来执行此操作

[alias]
    update = !git stash save -u && git pull && git stash pop

我在那里抛出了
-u
,以隐藏未跟踪的文件,以防拉操作添加这些文件。

我不知道有这样的命令(可能其他人有…编辑:很棒的推荐Schwern!)

但是,您是否在功能分支工作?如果没有,我强烈建议将它们添加到项目的git工作流中。这将减少您需要更新本地分支的次数,因为从理论上讲,每个分支的人数会更少

我发现这个git工作流参考在过去很有用:

运行
git pull——rebase
可能就是你想要的

-r

--rebase[=false | true | preserve]

true
时,取数后在上游分支的顶部重新设置当前分支的基础。如果存在与上游分支相对应的远程跟踪分支,且上游分支自上次获取后已重新定基,则重新定基将使用该信息来避免对非本地更改重新定基

当设置为
preserve
时,使用传递给
git rebase
--preserve merges
选项重新基址,以便本地创建的合并提交不会被展平

false
时,将当前分支合并到上游分支

请参见中的
pull.rebase
branch..rebase
branch.autoSetupRebase
,如果要进行
git pull
,请始终使用
--rebase
而不是合并

您提到您正在与其他开发人员一起使用此分支,因此请注意文档中该部分末尾的警告

注意
这是一种潜在的危险操作模式。它改写了历史,如果你已经出版了历史,那就不是好兆头了。除非仔细阅读,否则不要使用此选项

你正在寻找的,正是你想要的(还有更多)

它做了以下工作:

  • 获取所有本地分支
  • 重新调整(而不是合并)具有关联远程分支的所有本地分支中的任何传入更改
  • 在重新设置基础之前/之后隐藏/取消隐藏本地更改
我经常使用它,它非常适合保持回购同步,而无需手动检查分支、隐藏、弹出等

您可以使用

gem install git-up
然后在任何Git回购中使用

git up

仅此而已……

如何执行正常的
git获取
,然后执行
git-rebase--autostash

曼吉特再基地

--[no-]autostash
       Automatically create a temporary stash before the operation begins, 
       and apply it after the operation ends. This means that you can run
       rebase on a dirty worktree. However, use with care: the final stash 
       application after a successful rebase might result in non-trivial
       conflicts.

这样做的问题是,如果在取消搁置更改时出现任何冲突,这些更改将丢失,如果您确实进行了应用,则最终将得到一个隐藏列表。@SaulOrtega它们不会丢失
git stash pop
仅在成功应用隐藏条目时才会删除该条目。如果存在冲突,您的更改将保留在隐藏中。从
“应用状态可能会因冲突而失败;在这种情况下,它不会从隐藏列表中删除。您需要手动解决冲突,然后手动调用git stash drop。
“不,我遇到此错误:无法使用重基拉取:您有未隐藏的更改。请提交或隐藏它们。正确:创建一个正在进行的工作提交,
git pull--rebase
,然后继续前进。当你准备好分享你的提交时,根据需要清理未发布的历史记录。我不确定我是否在关注你,当你说“创建一个正在进行的工作提交”时,你是说隐藏你的更改吗?@SaulOrtega他所说的“正在进行的工作”提交是指提交未完成的工作(即使在Git中,也要避免这种做法),pull,然后继续工作。然后,在稍后推动共享您的更改之前,请执行
git-rebase-i
以修复“正在进行的工作”提交。如果这听起来不必要的复杂和容易忘记,那就是。藏、拉、拆是一种更好的做法。虽然使用
--rebase
是个好主意,但它不适用于您的问题。这个答案最好作为注释。虽然使用功能分支是一种很好的做法,但它不会改变您必须更新的频率。它从保持本地副本的最新状态变为保持功能分支的最新状态。谢谢@nwinkler,我已经在使用git up,但是当我想要拉取并且我有尚未提交的更改时,我会遇到一个错误,我必须在拉取之前保存更改或提交更改,这样我就不会丢失更改。Mh,我只是尝试了一些未老化的变化,它的工作完美无瑕。Git up隐藏了更改,然后合并了传入的更改,然后取消了我的未归档更改。我一直在用这个…让我再做一次,让你知道我的具体错误是什么。只是为了确保我做得正确。如果你已经准备好了所有的提交,你只需选择push,或者我遗漏了什么步骤?不确定你在问什么。Git up和pull是从远程回购获取更新。推送意味着将更新发送到远程回购。不确定您真正想要的是什么信息…如果我与我获取的信息发生冲突,会发生什么情况?正在进行的工作是否会丢失?获取不会导致像
pull
那样的冲突,因为它只下载引用和对象,而不进行合并。尽管如手册页中所述,在重新应用隐藏的更改时可能会发生冲突,但我想这就是我在应用隐藏时的意思,在发生冲突时会丢失吗?至少对我来说是git