git 记录

博客 && 文档

三分钟教你学Git

忽略

参考

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信息

无痕修复:优雅修改本地及远程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 001commit 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 单行、多行 详细显示结果、提交的文件名【汇总参数演示】

posted @ 2024-06-28 07:27  潼关路边的一只野鬼  阅读(14)  评论(0编辑  收藏  举报