GIT - 如何在不进行更改的情况下切换分支,反之亦然

时间:2017-04-13 12:33:24

标签: git

最近我们从TFS搬到了GIT,所以我还在学习如何使用这个神奇的工具。

目前我正在使用一个非常简单的结构,如下所示:

main -------------------------------------- 01 ----------
\                                           /
 dev ----------------------- 01 ---------- 02 ----------
  \                          /             /
   feat/login ------ 01 --- 02 --- 03 --- 04 --- 05 ---
  • 开发人员在feature/something工作,并且每次登记时都会工作并触发带有测试的构建
  • 当该功能稳定后,他们会合并回dev,其中包含来自feature/something的一个或多个签到
  • 当整个功能准备就绪时,他们会将dev中的功能合并到main

问题如下:

  • 如果我从feat/login开始工作,如果我git checkout dev我没有从dev获取最新代码,但我在feat/login中更改了我的最新本地文件。 如何在不继续执行上一个分支机构提交的本地更改的情况下结帐dev
  • 假设某位开发人员犯了错误,我如何rollback 01 dev之前的02,并将其推送到最新办理登机手续if (minotos.length = 1) { minotos = "0" + minotos; } 不再是最后一个了吗?

2 个答案:

答案 0 :(得分:3)

1)Stash您的更改,结帐到另一个分支,在那里进行一些更改并返回原始分支并应用/弹出您的存储。

$ git stash
$ git checkout dev

# do something in you dev branch

$ git checkout feat/login
$ git stash apply

您可以使用命令$ git stash list

查看您的存储列表

2)好像你想要恢复变化。我建议你不要把git历史作为初学者。无论如何,如果你想在这里尝试一下,那么answer如何做到这一点很好。正如Lasse所说,创建另一个提交可以恢复要撤消的提交效果更好。

答案 1 :(得分:2)

您可以使用的另一个功能是git worktreehttps://git-scm.com/docs/git-worktree),它允许您同时拥有多个分支的工作副本,例如让我们假设你是主人:

git worktree add -b dev ../dev origin/dev
git worktree add -b feat_login ../feat_login origin/feat/login

将在../dev和../feat_login中为您提供2个额外的工作副本,其中包含dev和feat_login分支的工作副本。

我觉得这个功能在项目中特别有用,我必须经常在分支之间切换。