有一个文件需要放在远程仓库上但是我本地的更新不想上传

115 阅读3分钟

github要在远程仓库保持一个文件,同时在本地对该文件进行更改但不将这些更改推送到远程仓库,你可以使用 Git 的一些高级特性来管理这种情况。以下是几种处理这种情况的方法:

方法 1:使用 .gitignore 忽略文件

如果你不打算将文件的任何更改推送到远程仓库,你可以将该文件添加到 .gitignore 文件中。这样,Git 将忽略该文件的所有更改。

在仓库根目录下打开或创建一个 .gitignore 文件。

将你想要忽略的文件路径添加到 .gitignore 文件中。

例如,如果你的文件名是 local-config.txt,则添加以下行:

local-config.txt

方法 2:使用 git update-index 保持本地更改

如果你已经跟踪了该文件并且希望 Git 忽略对其的未来更改,你可以使用 git update-index 命令。

git update-index --assume-unchanged <file-path> 将 替换为你的文件路径。这将告诉 Git 忽略该文件的更改,不将其包含在将来的提交中。

取消忽略文件(恢复跟踪)的命令:

git update-index –no-assume-unchanged 【文件路径:文件夹名/文件名】

查看已经添加了忽略文件(取消跟踪)的命令: git ls-files -v

//查看所有文件的文件标识,H:正常跟踪文件;h:assume-unchanged文件

文件标识	描述
H	正常跟踪文件
S	skip-worktree文件
h	assume-unchanged文件
M	unmerged, 未合并
R	removed/deleted
C	modified/changed修改
K	to be killed
?	other,忽略文件
如果忽略的文件多了,可以使用以下命令查看忽略列表

git ls-files -v | grep '^h'

提取文件路径,方法如下

git ls-files -v | grep '^h' | awk '{print $2}'

所有被忽略的文件,取消忽略的方法,如下

git ls-files -v | grep '^h' | awk '{print $2}' |xargs git update-index --no-assume-unchanged  
    
git update-index --no-assume-unchanged <文件路径>
————————————————

方法 3:在提交前手动暂存更改

如果你偶尔需要更新远程文件,但通常不希望推送本地更改,你可以在每次提交前手动选择暂存更改。

使用 git add 选择性地暂存除了你的特定文件外的所有更改。

使用 git commit 创建提交。

使用 git push 将这些提交推送到远程仓库。

注意事项

在使用上述任何方法时,请确保你了解其对仓库的潜在影响。 如果你使用 .gitignore 或 git update-index --assume-unchanged,请记住这些更改只影响你的本地仓库。如果其他人在他们的本地版本中对这些文件进行了更改并推送到了远程仓库,可能会产生冲突。 在做这些操作时,请务必确保你了解它们的含义和潜在的副作用。对于重要的仓库,建议先在一个测试仓库中尝试这些操作。

方法4: 存入暂存区

git stash

将工程代码暂存入本地仓库,此时,可执行 "git checkout 分支名" 命令来切换分支。

git stash list

image.png

git stash save

在当前的仓库中创建一个位置,准备存储待存储的工程代码(即当前的工程代码)。

例如,git stash save "i2c_device"  命令,就是在本地仓库中创建一个名字为 i2c_device的位置,来存放待存放的代码工程。

git stash pop
用于恢复之前暂存的工作,并将暂存的内容应用到当前的工作目录中。执行该命令后,暂存的内容会从暂存栈中移除。 但是, git stash pop 命令使用的前提是,仓库中只有一个工程代码!!!

如果本地仓库存储了几个工程,则需要另外的命令进行恢复:git stash apply + stash@{某个工程的序号}

git stash apply + stash@{某个工程的序号}:将仓库中某一工程代码恢复到当前的工程目录下。

image.png