alexpdh's blog

git 常用操作命令

本篇文章旨在记录一些常用的 Git 命令,会随着工作过程不断的更新。

git remote

1
2
3
4
5
6
7
8
9
git remote 命令列出所有远程主机
git remote -v 可查看远程主机的网址
git remote show <主机名> 查看该主机的详细信息
git remote add 用于添加远程主机
git remote set-url origin [url] 修改远程仓库地址
git remote rm 删除远程主机
git remote rename 重命名远程主机
git remote set-url --add origin <url2,3,4...> 添加多个地址到远程库

git fetch

默认情况下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。它取回的代码对你本地的开发代码没有影响,所取回的更新,在本地主机上要用”远程主机名/分支名”的形式读取。比如origin主机的master,就要用origin/master读取。

1
2
3
git fetch <远程主机名> <分支名>
git fetch origin && git reset –hard origin/master 拉取远程代码并且覆盖本地更改

git branch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
git branch -r 查看远程分支
git branch -a 查看所有分支
git branch [branch-name] 新建一个分支,但依然停留在当前分支
git checkout -b [branch] 新建一个分支,并切换到该分支
git branch [branch] [commit] 新建一个分支,指向指定commit
git branch --track [branch] [remote-branch] 新建一个分支,与指定的远程分支建立追踪关系
git checkout - 切换到上一个分支
git cherry-pick [commit] 选择一个commit,合并进当前分支
git branch -d [branch-name] 删除分支
git push origin --delete [branch-name] 删除远程分支
git merge <分支名> 合并分支
git rebase <分支名> 合并分支
git revert -m 1 xxxx 回滚一个 merge

git pull

git pull 命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并

1
2
git pull <远程主机名> <远程分支名>:<本地分支名>

git push

1
2
git push origin master -f 强制推送远程分支
git push --force origin master 强制推送远程分支

git stash

1
2
3
4
5
6
7
8
9
git stash 保存当前的工作进度。会分别对暂存区和工作区的状态进行保存
git stash save "message..." 这条命令实际上是上一条 git stash 命令的完整版
git stash list 显示进度列表.
git stash pop [--index] [<stash>]
如果不使用任何参数,会恢复最新保存的工作进度,并将恢复的工作进度从存储的工作进度列表中清除。
如果提供参数(来自 git stash list 显示的列表),则从该 <stash> 中恢复。恢复完毕也将从进度列表中删除 <stash>。
git stash apply [--index] [<stash>] 除了不删除恢复的进度之外,其余和 git stash pop 命令一样
git stash clear 删除所有存储的进度

撤销 Git 的最后一次提交

1
2
git reset –soft HEAD~1

修改之前的提交记录或者很久前提交的记录

git rebase –interactive ID^
将需要修改的记录的 pick 改成 edit
执行更改
git commit –all –amend
git rebase –continue

使用多个远程代码库,并且使用多个不同的 SSH Key

  • 修改 ~/.ssh/config

Host bitbucket.org
HostName bitbucket.org
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
User git

Host bitbucket.org-key2
HostName bitbucket.org
IdentityFile ~/.ssh/key2_id_rsa
User git

  • 修改 .git/config

[remote “origin”]
url = git@bitbucket.org-key2:XXXX/yyyy.git
fetch = +refs/heads/:refs/remotes/origin/

和外部团队协作需要的维护多个远程库,合并其他库的更新的过程

git remote rename origin upstream
git remote add origin URL_TO_GITHUB_REPO
git push origin master
git pull upstream master && git push origin master

git 忽略规则

.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/
.txt # 会忽略 doc/notes.txt 但不包括 doc/server/notes.txt

修改 .gitignore 规则不生效解决办法

原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r –cached .
git add .
git commit -m ‘update .gitignore’

alexpdh wechat
欢迎扫一扫关注 程序猿pdh 公众号!