Git notes
Table of Contents

Git 配置

手动设置用户信息:

git config --global user.name "ABC"
git config --global user.email "abc@abc.com"

使用配置文件,vim ~/.gitconfig

[user]
    name = ABC
    email = abc@abc.com

[core]
    editor = vim

[alias]
    st = status
    br = branch
    df = diff
    l = log
    lg = log --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s [%C(cyan)%an%Creset] %Cgreen(%cr)%Creset' --graph --decorate
    co = checkout

Github 配置 SSH Key

1. 设置 git 的 username 和 e-mail

参考 Git 配置

2. 生成 ssh key

# 查看是否已存在 ssh key
ls ~/.ssh/id_rsa*

# 若没有生成一个新的 key
ssh-keygen -t rsa -C "abc@abc.com"

# 查看生成的 ssh key
cat ~/.ssh/id_rsa.pub

3. Github 添加 ssh key

在 Github 用户设置里将 ~/.ssh/id_rsa.pub 中的内容贴上去。

4. 验证

ssh -T git@github.com

GitHub Standard Fork & Pull Request Workflow

主要思想:从主 repo fork 到自己账户下,设置 upstream,保持 remote master 和 local master 干净,新 feature 在分支开发,开发完同步主 repo (merge, rebase …),从开发分支直接发 pull request 到主 repo。

有一点要注意,不要在 local master 分支上开发新 feature ,否则同步远端 upstream 分支的时候会乱掉。

1. Fork 主 repo 到自己账户

# Clone your fork to your local machine
git clone git@github.com:USERNAME/FORKED-PROJECT.git

2. 保持远端的 Fork 与上游同步

# Add 'upstream' repo to list of remotes
git remote add upstream https://github.com/UPSTREAM-USER/ORIGINAL-PROJECT.git

# Verify the new remote named 'upstream'
git remote -v

# Fetch from upstream remote
git fetch upstream

# View all branches, including those from upstream
git branch -va

# Checkout your master branch and merge upstream
git checkout master
git merge upstream/master

本地尽量不要用 master 开发,可以避免同步时出现冲突。

3. 创建分支开发新 feature

如果要进行开发(new feature or bugfix),建议创建一个新的分支开发,如 dev_xxx 或者 bugfix_xxx 。这样能够最大程度的控制自己的修改,同时保证修改同 master 分支的隔离。

4. 提交 Pull Request

先同步远端上游 master 到本地 master,再在开发分支上 rebase master,提 pr 的时候可以直接从分支提:

# Fetch upstream master and merge with your repo's master branch
git fetch upstream
git checkout master
git merge upstream/master

# If there were any new commits, rebase your development branch
git checkout newfeature
git rebase master

以上参考自 Chaser324/GitHub-Forking.md


git clone --depth=1 之后怎样获取其他分支?

git remote set-branches origin <remote_branch_name>
git fetch --depth 1 origin <remote_branch_name>
git checkout <remote_branch_name>

本地 repo 关联到远端 repo

git remote add origin git@github.com:your_name/your_project.git
git remote show origin

git branch --set-upstream-to=origin/<branch> <local_branch>

GitHub 设置本地 repo 记住登录信息

github 针对本地 repo 设置保存用户名和密码,不用每次 pull/push 都重新输入:

git config --local credential.helper store

git stash 用法总结和注意点

参考:

https://www.cnblogs.com/zndxall/archive/2018/09/04/9586088.html

# 执行存储时,添加备注,方便查找
git stash save "save message"

# 列出存储内容
git stash list

# 显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},
# 比如第二个 git stash show stash@{1}
git stash show

# 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p
# 比如第二个:git stash show stash@{1} -p
git stash show -p

# 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},
# 如果要使用其他存储,git stash apply stash@{$num}
# 比如第二个:git stash apply stash@{1} 
git stash apply

# 命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,
# 默认为第一个stash,即stash@{0},如果要应用并删除其他stash,
# 命令:git stash pop stash@{$num}
# 比如应用并删除第二个:git stash pop stash@{1}
git stash pop

# 丢弃stash@{$num}存储,从列表中删除这个存储
git stash drop stash@{$num}

# 删除所有缓存的stash
git stash clear

注意: git add 只是把文件加到git 版本控制里,并不等于就被stash起来了,git add和git stash 没有必然的关系,但是执行git stash 能正确存储的前提是文件必须在git 版本控制中才行。

常规 git stash 的一个限制是它会一下暂存所有的文件。有时, 只备份某些文件 更为方便,让另外一些与代码库保持一致。一个非常有用的技巧,用来备份部分文件:

  1. add 那些你不想备份的文件(例如: git add file1.js, file2.js)
  2. 调用 git stash –keep-index。只会备份那些没有被add的文件。
  3. 调用 git reset 取消已经add的文件的备份,继续自己的工作。