# git - 常见场景

偶尔会遇到冲突鸭,设置仓库鸭,回退代码鸭,等 git 操作场景,记录一下,方便翻阅。

# 分支相关

# 全部接受远程分支

链接: How do I force “git pull” to overwrite local files? (opens new window) 在服务器上 pull 代码的时候,提示合并失败:Automatic merge failed; fix conflicts and then commit the result.

# 先查看本地有没有没有提交的改动
git status

# 然后远程仓库的最新记录
git fetch --all

# 把本地分支 reset 
git reset --hard origin/master # git reset --hard origin/<branch_name>
1
2
3
4
5
6
7
8

# 文件相关

# 删除缓存区文件

有时候新建项目,还没有配置好 .gitignore 文件,导致 git add 的时候,把 webStrom 的配置文件也添加进去了。想要撤销已经 add 了文件。

webStorm 配置

可以使用 git rm 来移除。

#usage: git rm [<options>] [--] <file>...
#    -n, --dry-run         dry run
#    -q, --quiet           do not list removed files
#    --cached              only remove from the index
#    -f, --force           override the up-to-date check
#    -r                    allow recursive removal
#    --ignore-unmatch      exit with a zero status even if nothing matched

git rm -rf .idea --cached
# rm '.idea/.gitignore'
# rm '.idea/misc.xml'
# rm '.idea/modules.xml'
# rm '.idea/vcs.xml'
1
2
3
4
5
6
7
8
9
10
11
12
13

操作后,文件还是真实存在的,只是没有添加在 git 的缓存。修改 .gitignore 后,就不会被添加了。

# 丢弃本地所有未提交的更改

主要是回退本地的更改

git clean -df //丢弃所有 untracked 的文件
git reset --hard //将 tracked 的文件重置到前一个版本
1
2

# 获取某次 commit 的文件

git checkout <commit> <filePath> 
# commit 可以通过 git log 查看,前六位即可
1
2

# 配置相关

# 修改用户名和 Email

有时候不同的项目在不同的代码托管平台上,用户名和 Email 不一样。或者公司项目需要使用内部名称 和 Email 之类的。就需要进行修改。 有两个配置:

  • 全局配置
git config --global user.name Your Name
git config --global user.email you@example.com
1
2

也可以通过 vim ~/.gitconfig 查看

  • 项目配置
git config user.name Your Name
git config user.email you@example.com
1
2

可以通过当前项目路径下 .git/config 查看

  • 提交时修改 git commit --amend --author='Your Name'

  • 修改已经提交的 commit 里面的用户名和邮箱

#!/bin/sh
# windows
# git filter-branch --env-filter '
git filter-repo --env-filter '

OLD_EMAIL="old-email@qq.com"
CORRECT_NAME="Rem486"
CORRECT_EMAIL="rem486x@qq.com"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
上次更新: 11/18/2022, 10:58:31 AM