git 记录
博客 && 文档
忽略
参考
总结
本地忽略文件
某些文件需要忽略,但是不想修改 .gitignore
,可以在 .git/info/exclude
中配置,此文件与 .gitignore
有相同的规则
忽略某些文件的提交
某些文件在本地仓库中会修改,但是又不想提交修改, 可以使用如下命令
# 忽略
git update-index --skip-worktree /path/to/file
# 查看忽略的文件
git ls-files -v | grep ^S
# 撤销
git update-index --no-skip-worktree /path/to/file
忽略文件的方法
.gitignore
.git/info/exclue
git update-index --assume-unchanged
git update-index --skip-worktree
区别
.gitignore
说明:显式地阻止提交文件。
优势:.gitignore 文件本身提交至远程仓库,全组共享忽略文件配置。
局限:如果项目已经存在远程仓库,即使被加入 .gitignore
,仍然可以进行修改并提交。本地的修改会显示在 git status
结果中
.git/info/exclue
说明:显式地阻止提交文件。
优势:exclude
文件本身不会提交至远程仓库,因此适合放一些个人定制的 gitignore
项目。
局限:和 .gitignore
存在同样地局限。文件若已存在远程仓库,则本地修改仍可以提交至远程仓库。本地的修改会显示在 git status
结果中。
assume-unchanged
说明:声明本地远程都不会修改这个文件。
优势:git 直接跳过这些文件的处理以提升性能。文件不会出现在 git status
。
局限:不适合本地或远程需要修改的文件。本地会忽略掉之后远程文件的修改。
skip-worktree
说明:声明忽略文件的本地修改。
优势:本地可以对文件做一些个人定制。文件不会出现在 git status
。
局限:拉取远程文件更新,或切换分支时有可能出现冲突,需要撤销忽略后手动解决冲突。
多用户配置
删除全局用户信息
多用户情况下,尽量不要设置全局用户信息
# 添加全局用户信息
git config --global user.name "用户名"
git config --global user.email "邮箱"
#删除全局用户信息
git config --global --unset user.name
git config --global --unset user.email
生成 key
注意保存路径
$ ssh-keygen -t rsa -C "github@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): id_rsa_github
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa_github.
Your public key has been saved in id_rsa_github.pub.
The key fingerprint is:
SHA256:K8ZzHA4rrhgHlv7qyP+dAmvpQIq+jPUpbMdjXZncAnE github@qq.com
The key's randomart image is:
+---[RSA 2048]----+
| |
| . E |
| o |
| . . |
|.+ .oS+ |
|*. . . =*o. |
|++o.=.*.=. |
|*=**==o+. |
|=OBO=o.o |
+----[SHA256]-----+
将 key 添加至响应的网站
配置 config
文件位置 ~/.ssh/config
不可有注释
Host github.com
User github
Hostname github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github
Host 192.168.12.5
User gitlab
Hostname 192.168.12.5
Port 122 # 如果不是22则添加次行
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_gitlab
将密码加入密匙管理器
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa_github
Enter passphrase for /c/Users/Administrator/.ssh/id_rsa_github:
Identity added: /c/Users/Administrator/.ssh/id_rsa_github (/c/Users/Administrator/.ssh/id_rsa_github)
$ ssh-add ~/.ssh/id_rsa_gitlab
Enter passphrase for /c/Users/Administrator/.ssh/id_rsa_gitlab:
TortoiseGit 结合 bcompare
参考
TortoiseGit 文件比对工具使用 Beyond Compare 和 DiffMerge
设置
diff: C:\Program Files (x86)\Beyond Compare 3\BComp.exe %base %mine /title1=%bname /title2=%yname /leftreadonly
merge: C:\Program Files (x86)\Beyond Compare 3\BComp.exe” %mine %theirs %base %merged /title1=%yname /title2=%tname /title3=%bname /title4=%mname
修改 commit 信息
参考
无痕修复:优雅修改本地及远程Commit信息,保持项目历史整洁
修改最近一次的提交
git commit --amend
修改多次
n 为次数
# 第一步
git rebase -i HEAD~n
# 第二步
修改 pick 为 edit,然后 wq 退出
# 第三步
git commit --amend 修改提交信息
git rebase --continue
# 重复第三部,直到编辑完毕
例如如下 commit
$ git log --oneline
fd2b105 (HEAD -> master) commit 002
0e82138 commit 001
5659187 (origin/master, origin/HEAD) 解决编译报错
80c5b7c 导入源码
7fe7020 Initial commit
修改 commit 001
和 commit 002
可以使用 git rebase -i HEAD~2
,操作结果如下
laolang@DESKTOP-O12ME4M MINGW64 /e/gitee/bzrj/acwj (master)
$ git rebase -i HEAD~2
Stopped at 0e82138... commit 001
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
laolang@DESKTOP-O12ME4M MINGW64 /e/gitee/bzrj/acwj (master|REBASE 1/2)
$ git commit --amend
[detached HEAD 0dd2c0e] commit 001-001
Date: Fri Jun 28 07:36:28 2024 +0800
1 file changed, 1 insertion(+)
create mode 100644 one.txt
laolang@DESKTOP-O12ME4M MINGW64 /e/gitee/bzrj/acwj (master|REBASE 1/2)
$ git rebase --continue
Stopped at fd2b105... commit 002
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
laolang@DESKTOP-O12ME4M MINGW64 /e/gitee/bzrj/acwj (master|REBASE 2/2)
$ git commit --amend
[detached HEAD 604ff01] commit 002-002
Date: Fri Jun 28 07:38:57 2024 +0800
1 file changed, 1 insertion(+)
laolang@DESKTOP-O12ME4M MINGW64 /e/gitee/bzrj/acwj (master|REBASE 2/2)
$ git rebase --continue
Successfully rebased and updated refs/heads/master.
laolang@DESKTOP-O12ME4M MINGW64 /e/gitee/bzrj/acwj (master)
$ git log --oneline
604ff01 (HEAD -> master) commit 002-002
0dd2c0e commit 001-001
5659187 (origin/master, origin/HEAD) 解决编译报错
80c5b7c 导入源码
7fe7020 Initial commit
laolang@DESKTOP-O12ME4M MINGW64 /e/gitee/bzrj/acwj (master)
$
推送远程
--force-with-lease
提供了一种更安全的强制推送方式。它会在推送前检查远程分支的状态是否与你预期的一致。如果远程分支在你上次拉取后有其他人的新提交,推送会失败,从而避免意外覆盖他人的工作。在多人协作的环境中,--force-with-lease
是一个更好的选择
git push --force-with-lease origin <your_branch_name>
关于 git log
参考
Git log 进阶用法(含格式化、以及数据过滤)
git log 单行、多行 详细显示结果、提交的文件名【汇总参数演示】