Git

Git

Git命令

Posted by Sun8min on May 10, 2019

Git


基本操作

别名配置

参考:配置别名

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.last 'log -1'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

查看配置文件

cat ~/.gitconfig

查看帮助

git help

暂存区

变动暂存

git stash
## 若需要添加提示<message>
git stash push -m "<message>"

查看暂存区

git stash list

从暂存取出变动,默认从栈顶取出(栈:先入后出)

git stash pop
## 若明确需要取出某个变动<stash id>
git stash pop <stash id>

提交历史变直线

git rebase

代码回退

假设当前有以下提交,需要将third commit(<commit_id>:12582ab)丢弃

* 12582ab - third commit (2 minutes ago) <sun8min>
* 8936067 - second commit (4 minutes ago) <sun8min>
* 2d47fc8 - init (5 minutes ago) <sun8min>

使用reset, 需要注意,commit id 为需要回退到的点

git reset --hard 8936067
## 若文件改动需要保留
git reset 8936067

使用revert,需要注意,commit id 为要丢弃的点

git revert 12582ab

附:reset 与 revert 的区别

变动历史(后悔药)

git reflog

使用reflog查看变动历史,根据commit id可以回退

移除被git追踪的文件

移除已经被git追踪的文件 file_xx,需要git rm --cache -f file_xx,并在.gitignore文件添加忽略文件 file_xx, 如果文件在本地不需要保留,去掉--cache

附: 移除被git追踪的文件后还能看到该文件吗

强制提交

git push -f

其他

git仓库忽略文件

添加.gitignore文件,文件内容例:

### mac OS ###
*.DS_Store

### IntelliJ IDEA ###
**/.idea
**/*.iml

# generated site file
_site

**/:表示忽略所有路径下

调整github上面语言显示

添加.gitattributes文件,文件内容例:

## 忽略overlay目录文件,调整语言占比
sun8min-sso/overlays/* linguist-vendored=true

常见疑问

reset 与 revert 的区别

reset 之后,即使 push -f 强制提交,如果别人在 reset 之前有过下载,拉取了要丢弃的 commit, 之后推送远程仓库时会重新提交上去。

revert 是一个新的提交,让提交后的代码达到 reset 的效果。并且在远程仓库上还能看到提交历史。

所以如果是个人仓库,用reset,多人仓库,保险起见用revert。

移除被git追踪的文件后还能看到该文件吗

移除之后,当前commit不会看到,如果之前有提交过,在提交的commit还是能看到(即使后来移除git追踪的情况)。 以下操作可移除文件,但是注意!!如果有远程仓库,并且提交过,别人可能看到过,如果是密码类文件,最好更改密码。

假设要移除的文件名是file_xx,用git lg file_xx查看文件的第一次提交commit,并用reset --hard 重置代码到file_xx文件第一次提交前的地方,之后移除被git追踪的文件,如果有远程仓库, 再使用push -f强制提交。