Git - Git 操作问题罗列

Posted:   December 14, 2019

Edited:   January 17, 2020

Status:   Writing

Tags :   Git

Categories :   Git

Were equations, pictures or diagrams not properly rendered, please refresh the page. If the problem persists, you can contact me.

Git 操作问题多多

很多问题,如果不记下来,下次还会遇到,得重头再来,故写此文,持续记录~ 到哪天 Git 过时不用了,其实可能是我不用了~

问题

enable two-factor auth后,使用普通密码无法 push

Authentication failed for 'https://github.com/bemself/zh.javascript.info.git/'

这时候之前的密码无效了,得用 token。去 Github->Settings->Devloper Settings->Generate Token,然后用这个 token 即可。

git check 其他分支提示 untracked working tree files would be overwritten

本地的文件有修改,但还没有 indexed, 用 git checkout 不灵:

> git checkout <another_branch_name>
error: The following untracked working tree files would be overwritten by checkout:
        1-js/03-code-quality/01-debugging-chrome/largeIcons.svg
Please move or remove them before you switch branches.

如果你不想保留这些文件,那就加 -f 参数:

git checkout -f <another_branch_name> 

同样,在 git merge的时候也遇到过这个错误,但git merge没有 -f参数,所以只能先 track 文件再 merge 了,像这样:

git add * 
git stash
git stash drop        // 如果不想保留这个 stash

这个答案中提到还有一种情况,上述解决方法就不灵了,

This doesn’t work if the files are from submodules that were removed and then readded as normal files

那样的话,就要用到这个命令:(我没有实操过这个,仅做记录待验)

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

git merge conflict, using ours or theirs

CONFLICT (content): Merge conflict in article.md
matic merge failed; fix conflicts and then commit the result.

解决方法:

git checkout --ours article.md
or
git checkout --theirs article.md

unable to delete ‘remote_branch’: remote ref does not exist

我的某个 PR merge 之后, 页面提示我说你的 这个 PR 的分支可以安全删除了,我就愉快的删除了。

结果我到本地 git brach -a 发现还在呀:

remotes/origin/pr-branch

那就再删一遍吧:

git pu origin --delete pr-branch

但是报错了,error: unable to delete 'pr-branch': remote ref does not exist

原因自然是远程那个分支已经被删除了,那现在我git br -a看到的其实是我本地保存的 远程分支,只要把这个删除就好了

那怎么删?

首先想到用 git branch -d remotes/origin/pr-branch 来删,结果说error: branch remotes/origin/pr-branch 不存在,但如果我 cat .git/refs/remotes/origin/pr-branch 是没问题的,那是咋回事?没有想通,想是 git 哪个环节失灵了。

好在还有其他办法,在git remove branch 一文中提到过,分支就是个指针,在系统中以文件形式存在着,所以找到 .git/refs/remotes/origin下面的以分支命名的文件,删掉即可: rm -f .git/refs/remotes/origin/pr-branch

ChangeLog

  • 2019-12-20 update
  • 2019-12-14 init

Comments


Be the first one to comment on this page!
You can use extended GitHub flavored markdown in your comment. Commenting FAQs & Guidelines