在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:jaywcjlove/git-tips开源软件地址:https://github.com/jaywcjlove/git-tips开源编程语言:Markdown 100.0%开源软件介绍:Git Tips一些使用技巧和笔记笔记,记录一些 git 常用和一些记不住的命令,这个笔记原本是基于 颜海镜的文章增加的,后面慢慢增加了许多内容,独立一个仓库维护,方便查询和使用。 目录
安装卸载官方教程,在 Linux/Unix 系统中,通过工具在中安装 下面介绍在 CentOS 系统中,通过 yum 来安装 git
官方文档说 git 在 现在我们通过,IUS社区下载 ius-release.rpm 文件进行安装 # 注意下载不同的版本,本机 CentOS 7
wget https://centos7.iuscommunity.org/ius-release.rpm
# 安装rpm文件
rpm -ivh ius-release.rpm 查看可安装的git安装包 repoquery --whatprovides git
# git-0:1.8.3.1-13.el7.x86_64
# git2u-0:2.16.5-1.ius.centos7.x86_64
# git2u-0:2.16.2-1.ius.centos7.x86_64
# git2u-0:2.16.4-1.ius.centos7.x86_64
# git-0:1.8.3.1-14.el7_5.x86_64 yum 卸载 git 安装新版本 卸载 # 卸载老的版本
yum remove git
# 安装新的版本
yum install git2u 配置管理首先是配置帐号信息 git help config # 获取帮助信息,查看修改个人信息的参数
git config --list # 查看配置的信息
git config --global user.name "小弟调调" # 修改全局名字
git config --global user.email "[email protected]" # 修改全局邮箱
git config --global --unset <entry-name> # 删除全局设置 不常见的使用场景忽略文件的权限变化不再将文件的权限变化视作改动 git config core.fileMode false 设置大小写敏感git config --get core.ignorecase # 查看git 的设置
git config core.ignorecase false # 设置大小写敏感
git rm -r --cached <目录/文件> # 远程有俩相同目录,通过这种方式清除掉,然后提交记录 配置自动换行自动转换坑太大,提交到git是自动将换行符转换为lf git config --global core.autocrlf input 创建SSH密钥这个密钥用来跟 github 通信,在本地终端里生成然后上传到 github ssh-keygen -t rsa -C '[email protected]' # 生成密钥
ssh-keygen -t rsa -C "[email protected]" -f ~/.ssh/ww_rsa # 指定生成目录文件名字
ssh -T [email protected] # 测试是否成功 多账号ssh配置1.生成指定名字的密钥
2.密钥复制到托管平台上
3.修改config文件
Host jslite.github.com
HostName github.com
User git
IdentityFile ~/.ssh/jslite_rsa
Host work.github.com
HostName github.com
# Port 服务器open-ssh端口(默认:22,默认时一般不写此行)
# PreferredAuthentications 配置登录时用什么权限认证
# publickey|password publickey|keyboard-interactive等
User git
IdentityFile ~/.ssh/work_rsa
4.测试 ssh -T [email protected] # `@`后面跟上定义的Host
ssh -T work.github.com # 通过别名测试
ssh -i ~/公钥文件地址 Host别名 # 如 ssh -i ~/.ssh/work_rsa work.github.com 5.使用 # 原来的写法
git clone [email protected]:<jslite的用户名>/learngit.git
# 现在的写法
git clone [email protected]:<jslite的用户名>/learngit.git
git clone [email protected]:<work的用户名>/learngit.git 5.注意 如果你修改了id_rsa的名字,你需要将ssh key添加到SSH agent中,如: ssh-add ~/.ssh/jslite_rsa
ssh-add -l # 查看所有的key
ssh-add -D # 删除所有的key
ssh-add -d ~/.ssh/jslite_rsa # 删除指定的key 免密码登录远程服务器$ ssh-keygen -t rsa -P '' -f ~/.ssh/aliyunserver.key
$ ssh-copy-id -i ~/.ssh/aliyunserver.key.pub [email protected] # 这里需要输入密码一次 编辑 Host aliyun1
HostName 192.168.182.112
User root
PreferredAuthentications publickey
IdentityFile ~/.ssh/aliyunserver.key 上面配置完了,可以通过命令登录,不需要输入IP地址和密码 https协议下提交代码免密码git clone https://github.com/username/rep.git 通过上面方式克隆可能需要密码,解决办法:进入当前克隆的项目 [core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
- url = https://github.com/username/rep.git
+ url = https://用户名:密码@github.com/username/rep.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master 文件推向3个git库1. 增加3个远程库地址 git remote add origin https://github.com/JSLite/JSLite.git
git remote set-url --add origin https://gitlab.com/wang/JSLite.js.git
git remote set-url --add origin https://oschina.net/wang/JSLite.js.git 2. 删除其中一个 set-url 地址 usage: git remote set-url [--push] <name> <newurl> [<oldurl>]
or: git remote set-url --add <name> <newurl>
or: git remote set-url --delete <name> <url>
3.推送代码 git push origin master
git push -f origin master # 强制推送 4.拉代码 只能拉取 git pull origin master
git pull --all # 获取远程所有内容包括tag
git pull origin next:master # 取回origin主机的next分支,与本地的master分支合并
git pull origin next # 远程分支是与当前分支合并
# 上面一条命令等同于下面两条命令
git fetch origin
git merge origin/next 如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。 $ git pull -p
# 等同于下面的命令
$ git fetch --prune origin
$ git fetch -p 5.更改pull 只需要更改config文件里,那三个url的顺序即可,fetch-url会直接对应排行第一的那个utl连接。 修改远程仓库地址git remote remove origin # 删除该远程路径
git remote add origin [email protected]:JSLite/JSLite.git # 添加远程路径 撤销远程记录git reset --hard HEAD~1 # 撤销一条记录
git push -f origin HEAD:master # 同步到远程仓库 放弃本地的文件修改git reset --hard FETCH_HEAD # FETCH_HEAD表示上一次成功git pull之后形成的commit点。然后git pull
git pull
You are not currently on a branch, so I cannot use any
'branch.<branchname>.merge' in your configuration file.
Please specify which remote branch you want to use on the command
line and try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) FOR details. 解决方法: git checkout -b temp # 新建+切换到temp分支
git checkout master 最简单放弃本地修改内容# 如果有的修改以及加入暂存区的话
git reset --hard
# 还原所有修改,不会删除新增的文件
git checkout .
# 下面命令会删除新增的文件
git clean -xdf 通过存储暂存区stash,在删除暂存区的方法放弃本地修改。 git stash && git stash drop 回退到某一个版本git reset --hard <hash>
# 例如 git reset --hard a3hd73r
# --hard代表丢弃工作区的修改,让工作区与版本代码一模一样,与之对应,
# --soft参数代表保留工作区的修改。 搜索 commit 历史记录git log --grep=224
# 这条命令是查看含有 "224" 关键字的 git commit 回滚到某个commit提交git revert HEAD~1 # 撤销一条记录 会弹出 commit 编辑
git push # 提交回滚 去掉某个commit# 实质是新建了一个与原来完全相反的commit,抵消了原来commit的效果
git revert <commit-hash> 把 A 分支的某一个 commit,放到 B 分支上对两个分支,同时都拥有的文件,进行修改后,再同时 git checkout <branch-name> && git cherry-pick <commit-id> 获取最近一次提交的 commit idgit rev-parse HEAD # e10721cb8859b2cd340d31a52ef4bf4b9629ddda
git rev-parse --short HEAD # e10721c 两个 git 仓库合并现在有两个仓库 kktjs/kkt 和 kktjs/kkt-next 我们需要将 # 1. 克隆主仓库代码
git clone [email protected]:kktjs/kkt.git
# 2. 将 kkt-next 作为远程仓库,添加到 kkt 中,设置别名为 other
git remote add other [email protected]:kktjs/kkt-next.git
# 3. 从 kkt-next 仓库中拉取数据到本仓库
git fetch other
# 4. 将 kkt-next 仓库拉取的 master 分支作为新分支 checkout 到本地,新分支名设定为 kkt-next
git checkout -b kkt-next other/master
# 5. 切换回 kkt 的 master 分支
git checkout master
# 6. 将 kkt-next 合并入 kkt 的 master 分支
git merge kkt-next
# 如果第 6 步报错 `fatal: refusing to merge unrelated histories`
# 请执行下面命令 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
git merge kkt-next --allow-unrelated-histories 在合并时有可能两个分支对同一个文件都做了修改,这时需要解决冲突,对文本文件来说很简单,根据需要对冲突的位置进行处理就可以。对于二进制文件,需要用到如下命令: git checkout --theirs YOUR_BINARY_FILES # 保留需要合并进来的分支的修改
git checkout --ours YOUR_BINARY_FILES # 保留自己的修改
git add YOUR_BINARY_FILES 合并多个commit# 这个命令,将最近4个commit合并为1个,HEAD代表当前版本。
# 将进入VIM界面,你可以修改提交信息。
git rebase -i HEAD~4
# 可以看到其中分为两个部分,上方未注释的部分是填写要执行的指令,
# 而下方注释的部分则是指令的提示说明。指令部分中由前方的命令名称、commit hash 和 commit message 组成
# 当前我们只要知道 pick 和 squash 这两个命令即可。
# --> pick 的意思是要会执行这个 commit
# --> squash 的意思是这个 commit 会被合并到前一个commit
# 我们将 需要保留的 这个 commit 前方的命令改成 squash 或 s,然后输入:wq以保存并退出
# 这是我们会看到 commit message 的编辑界面
# 其中, 非注释部分就是两次的 commit message, 你要做的就是将这两个修改成新的 commit message。
#
# 输入wq保存并推出, 再次输入git log查看 commit 历史信息,你会发现这两个 commit 已经合并了。
# 将修改强制推送到前端
git push -f origin master 修改远程Commit记录git commit --amend
# amend只能修改没有提交到线上的,最后一次commit记录
git rebase -i HEAD~3
# 表示要修改当前版本的倒数第三次状态
# 将要更改的记录行首单词 pick 改为 edit
pick 96dc3f9 doc: Update quick-start.md
pick f1cce8a test(Transition):Add transition test (#47)
pick 6293516 feat(Divider): Add Divider component.
# Rebase eeb03a4..6293516 onto eeb03a4 (3 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit 保存并退出,会弹出下面提示 # You can amend the commit now, with
#
# git commit --amend
#
# Once you are satisfied with your changes, run
#
# git rebase --continue
# 通过这条命令进入编辑页面更改commit,保存退出
git commit --amend
# 保存退出确认修改,继续执行 rebase,
git rebase --continue
# 如果修改多条记录反复执行上面两条命令直到完成所有修改
# 最后,确保别人没有提交进行push,最好不要加 -f 强制推送
git push -f origin master 利用commit关闭一个issue这个功能在Github上可以玩儿,Gitlab上特别老的版本不能玩儿哦,那么如何跟随着commit关闭一个issue呢? 在confirm merge的时候可以使用一下命令来关闭相关issue:
新建一个空分支# 这种方式新建的分支(gh-pages)是没有 commit 记录的
git checkout --orphan gh-pages
# 删除新建的gh-pages分支原本的内容,如果不删除,提交将作为当前分支的第一个commit
git rm -rf .
# 查看一下状态 有可能上面一条命令,没有删除还没有提交的的文件
git state |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论