# 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
2
3
4
5
6
7
8
# 文件相关
# 删除缓存区文件
有时候新建项目,还没有配置好 .gitignore
文件,导致 git add
的时候,把 webStrom
的配置文件也添加进去了。想要撤销已经 add 了文件。
可以使用 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
2
3
4
5
6
7
8
9
10
11
12
13
操作后,文件还是真实存在的,只是没有添加在 git 的缓存。修改 .gitignore
后,就不会被添加了。
# 丢弃本地所有未提交的更改
主要是回退本地的更改
git clean -df //丢弃所有 untracked 的文件
git reset --hard //将 tracked 的文件重置到前一个版本
1
2
2
# 获取某次 commit 的文件
git checkout <commit> <filePath>
# commit 可以通过 git log 查看,前六位即可
1
2
2
# 配置相关
# 修改用户名和 Email
有时候不同的项目在不同的代码托管平台上,用户名和 Email 不一样。或者公司项目需要使用内部名称 和 Email 之类的。就需要进行修改。 有两个配置:
- 全局配置
git config --global user.name Your Name
git config --global user.email you@example.com
1
2
2
也可以通过 vim ~/.gitconfig
查看
- 项目配置
git config user.name Your Name
git config user.email you@example.com
1
2
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21