Git在不影响本地文件更改的情况下提取内容,反之亦然

时间:2017-01-02 12:08:16

标签: git ubuntu github

我正在尝试从我的github存储库获取文件'README'到我的ubuntu本地。

来自Github存储库的文件'README'的内容类似于:

This is a git repo modified from github

现在对于同一个文件我在我的本地进行了更改:

This is a git repo locally modified from github local

现在在我的

Ubuntu终端,需要知道如何从Github获取文件内容而不影响我的本地内容,反之亦然

场景1:如果我在本地为README文件进行更改并说'git status',我会

             modified:   README

在我的终端。

这里我需要将本地内容添加到github而不影响内容。

场景2:对github进行的任何更新,我需要在不影响本地内容的情况下获取更新。

场景3:如何恢复在我的本地完成的更改并将github中的相同内容推送到其原始状态。

在所有场景中都需要命令。

更新:

尝试以下方法:

git stash
git pull origin master
git stash pop

我得到:

<<<<<<< Updated upstream
This is a git repo modified from github repo
=======
This is a git repo locally modified from github
>>>>>>> Stashed changes

如何从github获取更新并保留我们的本地更改,而无需手动编辑

2 个答案:

答案 0 :(得分:1)

场景1:您想要将本地内容添加到服务器而不更改服务器上的状态??? git branch可以解决您的问题。或者哪些内容不应受影响? git branch documentation

方案2:git fetch从服务器下载更改,但不会将更改应用于您本地。 git pull将适用它们。 git fetch documentation

场景3:如果您还原本地更改,由于您已经处于干净状态,因此没有什么可以推动的?

答案 1 :(得分:1)

场景1:了解Git,然后提交更改,然后推送更改。

场景2:您知道Git是分布式VCS吗?您可以在本地进行更改,提交更改,进行更多更改,提交更改,可以在本地处理多个分支,等等。当您想要集成上游更改时,您git fetch会将这些更改拖入远程跟踪分支,而不会影响您的本地分支。然后根据情况,您可以git mergegit rebase从远程跟踪分支到本地分支的更改('rebase'创建一个线性组件,您的提交将基于远程更改)但是,对于已经在重写历史记录时已经推送的更改,不应该这样做,“merge”会创建合并提交以合并您的更改和远程更改)。如果由于您在本地修改了文件并且远程发生了更改而合并或重新绑定并发生冲突,Git会告诉您并希望您手动或使用合并工具(git mergetool)解决冲突。 fetch+mergefetch+rebase也可以使用一个命令完成,即git pull,它可以进行合并或重组,具体取决于您的配置选项和命令行参数。如果您不想在将更改与本地更改结合使用之前查看远程更改,这将非常方便。

如果您不想先提交修改,可以使用git stash保存并恢复本地未提交的更改,然后将远程更改合并或重新绑定到本地分支,然后使用git stash pop再次应用更改。如果发生冲突,git stash pop就像git stash apply一样。然后,您可以解决冲突,如果您满意,请使用git stash drop删除最顶层的存储。

合并或重新定位时,您还可以使用完全使用文件的合并策略,忽略来自远程(不仅是冲突的文件)的内容。如果您只想使用冲突文件的版本,请使用git checkout --ours -- your-file.ext手动解决该文件的冲突。

场景3:如果您未在本地提交或添加索引,只需在回购根目录中执行git checkout .即可还原所有本地更改。如果您已经提交了提交,则可以使用git branch -f master origin/mastergit reset --hard origin/master将本地主分支带到远程分支状态,从而丢弃所有本地提交。