Git常用技巧

1 git pull 下拉分支

拉取data_utility下icu分支,命令:

git clone -b icu https://github.com/xingqiuxia/data-utility.git

报错:Error:RPC failed; result=35, HTTP code = 0

  • 原因是git http缓存不足,问题出现有一定随机性
  • 可通过设置缓存大小解决:git config --global http.postBuffer 20M

2 git push上传文件

  1. git add xxx 添加需要上传的文件 (git add . 表示添加当前目录下的所有文件)
  2. git commit -m '修改内容,做说明注释'
  3. git push origin 本地分支名:远程分支名 本地分支名,可由命令git branch获得,远程分支名是指GitHub上的分支名称

3 拉去主支,并合并到分支

git checkout master # 切换到主支
git pull
git checkout icu_dapeng # 切换到分支
git merge master

4 解决分支冲突

  1. 拉取两个存在冲突的分支 git clone -b (分支项目名) (主项目地址)
  2. 在VScode终端下运行git merge查看冲突
  3. 逐一解决带有黄色叹号标志的冲突
  4. git commit提交,git push origin推送

冲突的解决选择

  • Accept Current Change:选择当前分支(git branch可以查看当前分支,git checkout可以切换分支)
  • Accept lncoming Change:选择当前分支外的另一分支
  • Accept Both Changes:保留两者,以上下形式排列
  • Compare Changes:比较具体的不同点

5 避免文件权限变更引起的修改

执行git diff 命令时出现文本权限的变化:

diff --git a/index.php b/index.php
old mode 100644
new mode 100755

通过设置filemode,避免NTFS文件权限变更引起的修改

git config --add core.filemode false

6 合并上游主分支的更新

当改动较多时慎重合并,并注意处理冲突问题

合并过程:

# 配置上游仓库 
git remote add upstream [email protected]:liangliangyy/DjangoBlog.git
# 上游仓库配置删除:git remote remove upstream
git fetch upstream
# 之后只需要定期更新即可
git merge upstream/master
# 需要细致处理各种冲突

7 撤销不合理的操作

  • 撤销本地尚未提交的修改:git checkout .(谨慎使用)或git restore <file> 恢复单个文件(推荐使用)
  • 撤销添加到暂存区的文件:git reset <file>
  • 撤销最近的一次本地(commit):git reset HEAD^(仅回退,不修改) 或 git reset --hard HEAD^(回退+修改)
  • 撤销第一个本地提交(push):git update-ref -d HEAD && git rm --cached -r .(更新指针+清除暂存区缓存)
  • 撤销本地分支上中间的某次提交:git rebase -i <base-branch>(需要丢弃的记录将 pick 改为 d
  • 撤销本地git rm的文件:git reset HEAD <file> && git checkout <file>
  • 修改最新的提交(commit)信息:git commit --amend(更早期的信息需要使用rebase命令)
  • 撤销本地的merge:git reset --hard HEAD^(merge 操作相当于一次commit,因此用法类似)
  • 撤销本地的rebase:git reset --hard ORIG_HEAD
  • 撤销发生冲突的mergerebasegit commit --abortgit rebase --abort
  • 撤销git pull操作:先用git reflag命令查看之前的操作,再git reset --hard HEAD@{1}
  • 撤销push到远端的最近一次提交:git reset --hard HEAD^ && git push --force(旧版的强制覆盖,谨慎使用)
  • 撤销一个push到远程的分支或者tag:git push origin -d <branch/tag>

以上撤销操作主要参考自视频:【GitFAQ-那些可以反悔的神操作】

8 端口阻塞:Connection timed out

现象:

  • 能 ping 通 github.comssh -T [email protected] 超时
  • 超时报错 ssh: connect to host github.com port 22: Connection timed out

解决方案:

  • 尝试使用 443 端口:ssh -T -p 443 [email protected]
  • 443 端口可用的情况下,修改配置文件 vim ~/.ssh/config
Host github.com
 Hostname ssh.github.com
 Port 443
  • 其他解决方案:改用 https 协议(未尝试)
  • 其他可能原因:防火墙设置、DNS 问题、GitHub 网站问题

9 README 文件说明

README 文件一般指位于软件项目的根目录中的说明文档,旨在帮助用户和开发人员了解项目的目的、如何使用它以及如何为它做出贡献。这也是与潜在用户、协作者和贡献者进行交流的一种方式

清晰的 README 文件是区分项目质量的一个重要指标

常见的 README 文件结构

  • 项目描述:建立项目的动机和解决的问题
  • 功能说明:该项目使用的技术及其核心功能
  • 快速上手:用户如何安装并使用该项目
  • 其他:进阶资料、变更日志、贡献方式、许可证

撰写方式:MarkDownreStructuredText

快速构建 README 的工具:readme.soMake a README

可参考的 README 模板:模板1模板2模板3

往年同期文章