如何git pull而忽略了本地的变化?

M.A*_*A.B 3 git pull git-stash

当我试图从origin/master中提取一些更改时,我收到此错误:

error: Your local changes to the following files would be overwritten by merge

因为我做了本地的改变.我不想提交这些更改,所以我想我应该git stash在我的分支上使用git pull origin master

我的问题是:

  1. 拉动是否会忽略更改并正确合并
  2. 在拉动+合并后没有任何额外步骤后,我仍然可以使用我的本地更改吗?

谢谢 !

PS:是的,我用谷歌搜索,我只是想确保我理解正确.

LeG*_*GEC 6

以下是您的回购在全部应用后的演变情况:

  1. 在您拉动之前,进行本地修改:

    --*--*--*--*--*--*--A--B (<- some changes you did not commit yet)
          \             ^
           \            master: your latest local commit on master
            \
             *--*--C origin/master: the latest commit on the remote repo
    
    Run Code Online (Sandbox Code Playgroud)
  2. 之后git stash:

                          B <- stash: git stored local changes in its stash
                         /         
    --*--*--*--*--*--*--A <- master: the files on your disk have been restored
          \                          to their state in "master"
           \            
            \
             *--*--C origin/master: the latest commit on the remote repo
    
    Run Code Online (Sandbox Code Playgroud)
  3. 之后git pull:

                          B <- stash
                         /         
    --*--*--*--*--*--*--A--D <- master: merged remote branch in local branch
          \               /
           \             /   
            \           /
             *--*--C---/
                   ^ origin/master
    
    Run Code Online (Sandbox Code Playgroud)

git 应用拉动时通常执行的操作:合并本地分支中的远程更改.

  1. 之后git stash apply:

                          B <- stash
                         /         
    --*--*--*--*--*--*--A--D--B' <- modifications stored in B (not committed yet)
          \               /
           \             /   
            \           /
             *--*--C----
                   ^ origin/master
    
    Run Code Online (Sandbox Code Playgroud)

git 在新的主要提交之上重新应用存储在存储中的修改


警告是:

  • 步骤3.(git pull)可能会触发一些冲突,您需要在实际到达D图中的状态之前解决这些冲突
  • 步骤4.(git stash apply)也可能触发一些冲突,如果您的本地更改(在开头)实际上干扰了某些修改origin/master.
    在到达B'图表之前,您需要解决这些问题.


Dan*_*tos 5

如果您从服务器提取新代码,它将覆盖您的本地代码。

如果您的更改很重要,您必须提交它们,然后从服务器拉取。您将能够比较更改并正确合并它们。

do : git commit -m "Any message"thengit pull然后只有需要时 git 才会要求你解决合并冲突。

我强烈建议您使用任何基于 GUI 的 git 管理器。它会简化你的很多工作。

如果您的更改很小以至于不值得提交,您可以将本地更改放在临时位置,然后将其恢复。执行以下操作:

  1. 隐藏您的更改git stash。我会将您所有的本地更改放在临时位置。

  2. 从服务器拉git pull。您的所有更改都将被覆盖。

  3. 从 stash 带回本地更改git stash pop。它将带回本地更改。


小智 2

使用这些命令:

git stash  # stash you changes
git pull : # pull
git stash pop # re-get the stashed changes, not needed if you don't want to keep your changes
Run Code Online (Sandbox Code Playgroud)