跳到主要内容

Git Tips

git ssh 访问其他端口 port

常见于docker环境安装的git server, git ssh端口不是默认的22, 因此执行git命令的时候需要进行指定.

~/.ssh/config 中针对某个domain配置即可全局生效.

cat ~/.ssh/config 

Host gitea.example.domain
Port 8322

切换远程分支

常见于从https切换到git, 或者fork后切换到其他repo.

git remote set-url origin  git@gitea.domain.com:gee/muddy.git

开启debug日志模式

GIT_TRACE=1 GIT_LFS_TRACE=1 git pull
GIT_TRACE=1 GIT_LFS_TRACE=1 git pull
00:13:49.851083 git.c:444 trace: built-in: git pull
00:13:49.851584 run-command.c:664 trace: run_command: git fetch --update-head-ok
00:13:49.852954 git.c:444 trace: built-in: git fetch --update-head-ok
00:13:49.854280 run-command.c:664 trace: run_command: unset GIT_PREFIX; GIT_PROTOCOL=version=2 ssh -o SendEnv=GIT_PROTOCOL git@gitea.gee.cool 'git-upload-pack '\''gee/muddy.git'\'''
00:13:50.660224 run-command.c:664 trace: run_command: git rev-list --objects --stdin --not --all --quiet --alternate-refs
00:13:50.664130 run-command.c:664 trace: run_command: git rev-list --objects --stdin --not --all --quiet --alternate-refs
00:13:50.665339 git.c:444 trace: built-in: git rev-list --objects --stdin --not --all --quiet --alternate-refs
00:13:50.687810 run-command.c:1625 run_processes_parallel: preparing to run up to 1 tasks
00:13:50.687848 run-command.c:1657 run_processes_parallel: done
00:13:50.687871 run-command.c:664 trace: run_command: git maintenance run --auto --no-quiet
00:13:50.689376 git.c:444 trace: built-in: git maintenance run --auto --no-quiet
00:13:50.691207 run-command.c:664 trace: run_command: git merge FETCH_HEAD
00:13:50.692991 git.c:444 trace: built-in: git merge FETCH_HEAD
Already up to date.

远程分支直接覆盖本地

远程使用git commit --amend + git push -f 强行修改commit历史更新之后, 本地更新代码需要进行重置.

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

咨询了chatgpt, 上面这个命令只会重置本地的master分支, 如果要重置所有分支, 需要用这个命令:

git fetch --all     # 拉取最新的代码
git reset --hard origin/HEAD # 重置到远程代码库 HEAD 的最新代码状态
git pull
  • chatgpt 咨询

picture 3

"content": "这段代码什么意思 git fetch --all && git reset --hard origin/master && git pull\n",
"createdAt": 1685676346923
},
{
"role": "assistant",
"model": {
"id": "gpt-3.5-turbo",
"name": "GPT-3.5",
"maxLength": 12000,
"tokenLimit": 4000
},
"content": "这个命令的意思是,首先将所有分支的最新版本从远程代码库拉取到本地代码库中(`git fetch --all`),然后重置本地代码库到和远程代码库`origin/master`分支的最新版本相同的状态(`git reset --hard origin/master`),最后将本地代码库与远程代码库进行合并(`git pull`)。这个命令可以确保你本地代码库和远程代码库保持同步,并且任何本地修改不会被误导致代码库冲突。",
"createdAt": 1685676349678

{
"role": "user",
"model": {
"id": "gpt-3.5-turbo",
"name": "GPT-3.5",
"maxLength": 12000,
"tokenLimit": 4000
},
"content": "只有master分支会被重置吗, 其他分支呢",
"createdAt": 1685676442020
},
{
"role": "assistant",
"model": {
"id": "gpt-3.5-turbo",
"name": "GPT-3.5",
"maxLength": 12000,
"tokenLimit": 4000
},
"content": "执行`git reset --hard origin/master`命令时,只有本地的`master`分支会被重置到与远程`origin/master`分支的最新版本相同的状态。其他本地存在的分支不会被改变,它们仍然会指向之前的提交记录。但是,如果在`git fetch --all`和`git pull`命令执行期间,有其他分支的代码库更新,那么它们的更新版本将同样被更新到本地。执行`git pull`命令将自动将当前分支与远程分支合并,因此,其他分支的代码将被自动合并到相应的本地分支中。",
"createdAt": 1685676445752
},
{
"role": "user",
"model": {
"id": "gpt-3.5-turbo",
"name": "GPT-3.5",
"maxLength": 12000,
"tokenLimit": 4000
},
"content": "如果想要重置所有分支呢",
"createdAt": 1685677142978
},
{
"role": "assistant",
"model": {
"id": "gpt-3.5-turbo",
"name": "GPT-3.5",
"maxLength": 12000,
"tokenLimit": 4000
},
"content": "如果你想要重置所有分支,可以使用以下命令:\n\n```\ngit fetch --all # 拉取最新的代码\ngit reset --hard origin/HEAD # 重置到远程代码库 HEAD 的最新代码状态\n```\n\n这个命令将强制将所有本地分支重置为和远程代码库相同的状态,即所有分支都会更新到远程代码库 HEAd 的最新版本。请注意,这将清除所有本地未提交的修改及历史记录,谨慎使用。如果你只想要重置特定的分支,请将 `origin/HEAD` 替换为你想要重置的分支的名称。",
"createdAt": 1685677147508
}


git https Unauthorized

执行git pull显示无权限, 但是也没有弹出用户名密码输入, 没法解决. 最后将git remote url从https切换为git ssh, 然后使用本地ssh pub key 无密码登录, 问题解决.

git pull
Missing or invalid credentials.
Error: connect ECONNREFUSED /tmp/vscode-git-3a41efe1ea.sock
at PipeConnectWrap.afterConnect [as oncomplete] (node:net:1278:16) {
errno: -111,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '/tmp/vscode-git-3a41efe1ea.sock'
}
Missing or invalid credentials.
Error: connect ECONNREFUSED /tmp/vscode-git-3a41efe1ea.sock
at PipeConnectWrap.afterConnect [as oncomplete] (node:net:1278:16) {
errno: -111,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '/tmp/vscode-git-3a41efe1ea.sock'
}
remote: Unauthorized
fatal: Authentication failed for 'https://gitea.gee.cool/gee/muddy.git/'