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