Git 离线提交修改
背景设定:电脑 C(如公司电脑,没有网络或没有上传权限)上修改代码,借助电脑 P(如个人电脑,有网络,有权限)更新远程仓库
1. 电脑 C 上修改代码
- (1) 正常修改代码,可以选择配置 git 用户
# 查看当前用户名和邮箱 git config user.name git config user.email # 配置新的用户名和邮箱,去掉 --global 则只在当前仓库中有效 git config --global user.name "用户名" git config --global user.email "邮箱" # git config --global --unset user.name # git config --global --unset user.email - (2) 将修改提交到本地仓库:
# 添加更改到暂存区 git add . # 提交更改到本地仓库 git commit -m "Your commit message" - (3) 打包当前分支的改动为
your_changes.bundle文件
这将创建一个包含从 master 分支到当前 HEAD 所有提交的 bundle 文件。如果你的更改在其他分支上,或者你想打包不同的范围的提交,需要相应地调整这个命令。git bundle create your_changes.bundle HEAD master
2. 电脑 P 更新到远程仓库
- (1) 通过内网或 U 盘获得电脑 C 打包的文件
your_changes.bundle,拷贝到电脑 P 的代码路径下,并验证文件完整性cd your_repo_directory git bundle verify your_changes.bundle - (2) 从本地打包文件中获取最新更新,并存储到一个临时分支 temp_branch 上:
git fetch your_changes.bundle master:temp_branch - (3) 合并到 master 分支
# 切换到要合并的分支 git checkout master # 合并刚才的临时分支 git merge temp_branch # 删除临时分支 git branch -d temp_branch - (4) 推送到远程仓库
git push origin master
3. 电脑 C 上创建新的分支,在电脑 P 上同步
上面 1,2 的操作是针对已有分支的修改,如 master。
电脑 C 上执行:
# 创建并进入新分支
git checkout -b new_branch
# 添加修改
git add .
git commit -m 'your commit'
# 创建 bundle 文件
git bundle create new_branch.bundle HEAD new_branch
电脑 P 上执行:
# 创建并进入新分支
git checkout -b new_branch
# 导入文件
git pull new_branch.bundle new_branch:new_branch
# push
git push origin new_branch
4. 远程仓库中的修改同步到电脑 C
比如网页版或其他地方对远程仓库进行了更新,电脑 C 中的代码不是最新的,需要更新。
- (1) 在有网络的电脑 P 上更新到最新版
git pull origin master - (2) 电脑 P 打包最近的更新
这个命令会创建一个名为git bundle create updates.bundle HEAD masterupdates.bundle的文件,包含从 master 分支到当前 HEAD 的所有提交。如果你只想包含从电脑 P 上最后一个已知状态到当前状态的更新,你需要指定一个更精确的范围。 - (3) 电脑 C 拷贝 bundle 文件并更新
git bundle verify updates.bundle git fetch updates.bundle main:temp_branch # git merge temp_branch git rebase temp_branch # 如果你想保持工作目录不变 git branch -d temp_branch- 不同操作系统使用不同的换行符,Windows 使用 \r\n,而 Linux 和 macOS 使用 \n。如果你在电脑 C 上(假设为 Windows)提交了文件,然后将其解压到电脑 P 上(假设为 Linux 或 macOS),Git 可能会因为换行符的差异而认为文件被修改了。解决这个问题,你可以设置 Git 在提交和检出时自动转换换行符:
git config --global core.autocrlf input
- 不同操作系统使用不同的换行符,Windows 使用 \r\n,而 Linux 和 macOS 使用 \n。如果你在电脑 C 上(假设为 Windows)提交了文件,然后将其解压到电脑 P 上(假设为 Linux 或 macOS),Git 可能会因为换行符的差异而认为文件被修改了。解决这个问题,你可以设置 Git 在提交和检出时自动转换换行符:
5. 其他问题
(1) VScode 不显示 .git 文件夹
- Settings --> 搜索
files--> 将exlude中的 git 删掉 - 参考
(2) 指令终端不显示 .git 文件夹
- 进入到存储库所在的目录,然后执行
attrib -H .git,这个命令将取消.git文件夹的隐藏属性,使其重新显示在文件资源管理器中。 - 参考
2024.03.14
RdHotRiver

浙公网安备 33010602011771号