Git操作指南

虽然Github Desktop用得很爽,但是偶尔也会有一些特殊的需求(比如回滚或是在Linux环境下操作),故还是在此记录一下。

  • 初始化:git init project
  • 添加远程仓库:git remote add origin https://github.com/xxx/xxx.git
  • 设置默认远程仓库:git push -u origin master:master
  • 查看状态:git status
  • 查看日志:git log
  • 查看文件差异:git diff file
  • 查看提交/回复记录:git reflog
  • 回滚:git reset --hard HEAD^(或者跟哈希码,从reflog里得到)
      git reset --hard commit_id  // 不保留未提交的修改
      git reset --soft commit_id  // 默认方式,保留未提交的修改
    
  • 回滚完强制覆写远端仓库记录:git push origin local_branch --force
  • 添加要提交的文件:git add xxx.cpp
  • 提交到暂存区:git commit -m "update log" / -am实现添加并提交
  • 保存工作区:git stash -u
  • 删除暂存区
      git clean -f
      删除当前目录下untrack文件和文件夹, 不包括.gitignore中指定的文件和文件夹
      git clean -df
      删除当期目录下的所有untrack的文件和文件夹
      git clean -xdf
    
  • 推到远端仓库:git push
  • 只提交部分文件,同时修改提交时间
git add something
git stash -u -k # the most important step
git commit --date="Thu Jun 27 15:00:00 2019 +0800" -m "xxx"
git stash pop # pop out modification
  • 创建分支:git checkout -b dev
  • 查看分支:git branch
  • 切换分支:git checkout master
  • 合并分支:git merge dev
  • 拉取特定分支:git pull origin <远程分支名>:<本地分支名>
  • 拉取PR分支:git fetch origin pull/$ID/head:$BRANCHNAME$BRANCHNAME是自己想要创建的分支名
  • 合并多个commit:git rebase -i id

设置git账户信息(如果已经设置了,需要用--replace-all覆盖)

  • git config --global user.name "username"
  • git config --global user.email "email"
  • git config --list

当git文件夹在MacOS/Linux/Windows下迁移时,可能会出现git status将没有发生改变的文件也纳入变化的文件中,这可能是因为行尾换行或是文件权限引起的,可通过下面设置进行忽视。

# CRLF/LF
git config --global core.autocrlf true # Windows
git config --global core.autocrlf input # Linux

# File permission
git config core.fileMode false # ignore permission

子模块

  • 添加子模块:git submodule add <url>
  • 初始化子模块:git submodule init
  • 拉取子模块到本地仓库:git submodule update
  • 更新子模块内容:进入子模块文件夹后,git pull

添加SSH连接

参见Generating a new SSH key and adding it to the ssh-agent

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# This creates a new ssh key, using the provided email as a label.
> Generating public/private rsa key pair.
> Enter a file in which to save the key (/home/you/.ssh/id_rsa): [Press enter]
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
# Adding your SSH key to the ssh-agent
$ eval "$(ssh-agent -s)"
> Agent pid 59566
$ ssh-add ~/.ssh/id_rsa

然后将.ssh/id_rsa.pub添加到Github账户中,参见此文

可通过下面指令测试SSH是否能正常连接Github,见此文

$ ssh -T git@github.com

用SSH方式git clone可能比用HTTP快。关于在Linux下提速git clone,可参见此文

但注意用SSH很可能没法push上去,如果Github Desktop的SSH连接没有设置好的话,因此这时候可以重新将SSH换回HTTP,参见此文

Pull Request (PR)