我怎样才能保留空的 MASTER 分支以便能够结帐并从其他分支切换回来?
How can I preserve empty MASTER branch in order to be able to checkout and switch back from other branches?
我正在编写一些 python 脚本,用于新分支从一些旧的 SCM 系统(迁移活动)下载内容。
我希望能够 checkout
从 master
分支到那个新分支,将内容下载到新分支然后切换回 master 分支。 请注意,根本不应执行 MERGE 到 master
分支!!!。我正在通过 exec_cmd 方法执行所有命令,该方法在 linux 服务器上执行命令。
步骤:
git clone
在服务器上手动回购
执行脚本创建tmp文件使master不为空
exec_cmd(['touch', 'tmp.txt'])
签到新分行exec_cmd(['git', 'checkout', '-b', 'newBranch'])
使用自定义逻辑下载一些文件和文件夹...
尝试 return 到 master
分支 git checkout master
- 失败!!!
exec_cmd:
['git', 'checkout', 'master']
ERROR: command "git checkout master" failed with return code 1
Command output:error: pathspec 'master' did not match any file(s) known to git
使用命令(without merge
and without git login
through the script!)处理这个问题的正确方法是什么?我需要 return 回到 master 因为我需要再次从它创建一些其他内容的新分支所以我需要它是空的(或者几乎是空的一个 tmp 文件,我认为这会为我提供一个解决方案)!
谢谢
你的根本误区在这里:
execute script to create tmp file so that master is not empty exec_cmd(['touch', 'tmp.txt'])
在git中,分支不包含文件,它包含提交(或者更准确地说,它指向 承诺)。提交 确实 包含文件 - 具体来说,是存储库中所有文件的快照。一个提交不必有任何 new 文件,事实上它根本不需要有任何文件,因为“此时的存储库是空的”是您可以记录的一条信息。
另一个令人困惑的地方是,您似乎试图反复执行此操作,但是一旦分支存在,您就可以随时返回到它。所以你可以创建一个空的主分支一次,然后每次都切换到它。
要设置,正如 larsks 在评论中所建议的那样,您可以 运行 git commit --allow-empty -m 'This is just a placeholder'
或者您可以创建一个文件并提交它,或者您真正喜欢的任何东西。然后在您的脚本中,git checkout master
将 return 提交。
重要的是要指出 git checkout
只会更改在其切换的一个或两个提交中列出的文件的状态。如果您只是创建一个文件,它将是“未跟踪的”——还不是任何提交的一部分——并且切换分支不会触及它。
最后,致re-iterate:分支不包含文件,它包含提交。因此,在您的脚本中创建了一个分支后,您将需要在该分支上提交一些内容,否则就 git 而言,分支仍然只指向与 master 相同的内容。
我正在编写一些 python 脚本,用于新分支从一些旧的 SCM 系统(迁移活动)下载内容。
我希望能够 checkout
从 master
分支到那个新分支,将内容下载到新分支然后切换回 master 分支。 请注意,根本不应执行 MERGE 到 master
分支!!!。我正在通过 exec_cmd 方法执行所有命令,该方法在 linux 服务器上执行命令。
步骤:
git clone
在服务器上手动回购执行脚本创建tmp文件使master不为空
exec_cmd(['touch', 'tmp.txt'])
签到新分行
exec_cmd(['git', 'checkout', '-b', 'newBranch'])
使用自定义逻辑下载一些文件和文件夹...
尝试 return 到
master
分支git checkout master
- 失败!!!exec_cmd:
['git', 'checkout', 'master']
ERROR: command "git checkout master" failed with return code 1
Command output:error: pathspec 'master' did not match any file(s) known to git
使用命令(without merge
and without git login
through the script!)处理这个问题的正确方法是什么?我需要 return 回到 master 因为我需要再次从它创建一些其他内容的新分支所以我需要它是空的(或者几乎是空的一个 tmp 文件,我认为这会为我提供一个解决方案)!
谢谢
你的根本误区在这里:
execute script to create tmp file so that master is not empty exec_cmd(['touch', 'tmp.txt'])
在git中,分支不包含文件,它包含提交(或者更准确地说,它指向 承诺)。提交 确实 包含文件 - 具体来说,是存储库中所有文件的快照。一个提交不必有任何 new 文件,事实上它根本不需要有任何文件,因为“此时的存储库是空的”是您可以记录的一条信息。
另一个令人困惑的地方是,您似乎试图反复执行此操作,但是一旦分支存在,您就可以随时返回到它。所以你可以创建一个空的主分支一次,然后每次都切换到它。
要设置,正如 larsks 在评论中所建议的那样,您可以 运行 git commit --allow-empty -m 'This is just a placeholder'
或者您可以创建一个文件并提交它,或者您真正喜欢的任何东西。然后在您的脚本中,git checkout master
将 return 提交。
重要的是要指出 git checkout
只会更改在其切换的一个或两个提交中列出的文件的状态。如果您只是创建一个文件,它将是“未跟踪的”——还不是任何提交的一部分——并且切换分支不会触及它。
最后,致re-iterate:分支不包含文件,它包含提交。因此,在您的脚本中创建了一个分支后,您将需要在该分支上提交一些内容,否则就 git 而言,分支仍然只指向与 master 相同的内容。