忽略本地变化时Git拉?

时间:2010-11-11 17:19:49

标签: git git-pull

有没有办法做git pull忽略任何本地文件更改而不会删除目录并且必须执行git clone

12 个答案:

答案 0 :(得分:675)

如果你的意思是你想让pull覆盖本地更改,那么就像工作树是干净的那样进行合并,那么,清理工作树:

git reset --hard
git pull

如果有未跟踪的本地文件,您可以使用git clean删除它们。使用git clean -f删除未跟踪的文件,-df删除未跟踪的文件和目录,使用-xdf删除未跟踪或忽略的文件或目录。

另一方面,如果您想以某种方式保留本地修改,则在拉动之前使用藏匿隐藏它们,然后再重新应用它们:

git stash
git pull
git stash pop

我认为从字面上忽略这些更改没有任何意义,但是 - 拉的一半是合并,它需要将提交的内容版本与它所获取的版本合并。 / p>

答案 1 :(得分:216)

对我来说,以下工作:

(1)首先获取所有更改:

$ git fetch --all

(2)然后重置主人:

$ git reset --hard origin/master

(3)拉/更新:

$ git pull

答案 2 :(得分:22)

下面的命令总是不会工作。如果您这样做:

$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.

$ git reset --hard
HEAD is now at b05f611 Here the commit message bla, bla

$ git pull
Auto-merging thefile1.c
CONFLICT (content): Merge conflict in thefile1.c
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

依旧......

真的重新开始,下载分支并覆盖所有本地更改,只需执行以下操作:


$ git checkout thebranch
$ git reset --hard origin/thebranch

这样可以正常使用。

$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.

$ git reset --hard origin/thebranch
HEAD is now at 7639058 Here commit message again...

$ git status
# On branch thebranch
nothing to commit (working directory clean)

$ git checkout thebranch
Already on 'thebranch'

答案 3 :(得分:13)

您只需要一个与rm -rf local_repo && git clone remote_url完全相同的命令,对吧?我也想要这个功能。我想知道为什么git不提供这样的命令(例如git reclonegit sync),svn也没有提供这样的命令(例如svn recheckoutsvn sync)。 / p>

尝试以下命令:

git reset --hard origin/master
git clean -fxd
git pull

答案 4 :(得分:8)

git fetch --all && git reset --hard origin/master

答案 5 :(得分:7)

查看git stash将所有本地更改放入“存储文件”并恢复到上次提交。此时,您可以应用隐藏的更改,或将其丢弃。

答案 6 :(得分:7)

如果你在Linux上:

git fetch
for file in `git diff origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull

for循环将删除在本地仓库中更改的所有跟踪文件,因此git pull可以正常工作。
最好的事情是,只有被跟踪的文件才会被repo中的文件覆盖,所有其他文件都将保持不变。

答案 7 :(得分:1)

这对我有用

def test_update_record_of_table(capsys):

    connection = sqlite3.connect("Northwind.db", timeout=10)

    cursor_db = connection.cursor()

    cursor_db.execute("select count(*) from test")
    before_count = cursor_db.fetchone()[0]

    cursor_db.execute("INSERT INTO {table_name}({fields}) VALUES ({new_record});".format(table_name='test', fields=tuple('CategoryName'), new_record=1400))

    print("before_count", before_count)
    assign_12_2.update_record_of_table("test", "CategoryName", "asdssf", 3, cursor_db)

    cursor_db.execute("select CategoryName from test")
    a = cursor_db.fetchall()[0]
    connection.commit()
    print(a)

    assert before_count

在接受答案的情况下,我遇到冲突错误

答案 8 :(得分:0)

这将获取当前分支并尝试快进到主站:

git fetch && git merge --ff-only origin/master

答案 9 :(得分:0)

.gitignore

“只要您最初没有将它们提交到任何分支,就可以向.gitignore添加不需要的文件。”

还可以运行:

git update-index-假定未更改的文件名

https://chamindac.blogspot.com/2017/07/ignoring-visual-studio-2017-created.html

答案 10 :(得分:0)

我通常这样做:

git checkout .
git pull

在项目的根文件夹中。

答案 11 :(得分:0)

最简单的方法是:

{
  "mimeType": "image/jpeg", 
  "kind": "drive#file", 
  "name": "file.jpg", 
  "driveId": "<Drive Id>", 
  "teamDriveId": "<Team Drive ID>", 
  "id": "<File ID>"
}