.gitconfig 的个人配置,将不断更新
git 操作笔记
修改远程仓库
-
添加远程仓库
git remote add repository_name repository_ssh_or_http_address
-
远程仓库重命名
git remote rename old_name new_name
-
删除远程仓库
git remote rm repository_name
本地文件修改
-
重命名文件
git mv old_name new_name
-
放弃所有工作区修改
git checkout -- .
使用镜像加速 git clone 和 git pull
使用github.com.cnpmjs.org
替换github.com
制作 patch
-
如果修改尚未提交
git diff > patch_name.patch
-
如果修改有新增文件,且新增文件不在 git 管理内
git diff --cached > patch_name.patch
-
如果修改中还包含二进制文件,例如图片
git diff --cached --binary > patch_name.patch
-
以某次提交内容制作 patch
git format-patch -1 commit_id
这里的 1 代表生成从 commit_id 起往前 1 个提交对应的 patch,也可以生成多个提交对应的 patch
打 patch
git apply patch_name.patch
查看某次提交
-
查询 commit ID
git log
-
根据 commit ID 查看某次提交的具体信息
-
查看最新提交
git show
-
查看某次提交
git show commitId
-
查看某次提交中某个文件的修改
git show commitId fileName
-
从 github 上下载某次 commit 对应的 patch
- 首先获取某次 commit 的 ID
-
然后修改 commit 的 URL
http://github/com/foo/bar/commit/${ID}.patch/
stash 使用方法
-
保存现场未提交修改
git stash
-
查看保存的修改
git stash list
-
查看某次保存的修改内容
git stash show -p <stash>
-
删除某次保存
git stash drop <stash>
-
恢复保存修改到工作空间
git stash pop
分支操作
从某次 commit 开始创建分支
git checkout commitId -b branchName
检出远端分支到本地
git checkout -b b1 origin/b1
删除分支
git br -d <branch name> // 删除已经 merge 的分支
git br -D <branch name> // 删除还没有 merge 的分支
远程分支覆盖本地分支
git fetch --all
git reset --hard origin/master (这里 master 要修改为对应的分支名)
git pull
修改本地分支和远程仓分支的映射关系
git branch -u <repository>/<branch> <branch>
分支重命名
git branch -m new-branch
or
git branch -m old-branch new-branch
rebase
合并主干代码时建议使用rebase
:
git co <feature>
git rebase <master>
回退提交
-
回退到某个版本
git reset –-hard <commit_id>
这里如果需要向前回退,则使用
git reflog
来获取 commit_id。git reset –-soft <commit_id>
和上面的差不多,但是保留未提交的修改。
git checkout [commit id] [file name]
针对某个文件回退到某次提交。
修改提交
-
删除提交
-
连同 log 一起删除
git rebase -i <commit_id>
这里的 commit id 是要删除的提交前面的提交,然后在编辑界面将要删除的提交前面的 flag 改成
drop
,保存退出即可。 -
在现有的 log 基础上提交删除修改
git revert -n <commit_id>
这里的 commit id 是要撤销的提交,执行此命令后还需要再次提交一次,完成修改:
git commit -m "revert commit_id"
-
-
合并提交
-
git rebase -i <commit_id>
这里的 commit_id 代表需要合并的提交之前的提交
-
指定哪些 commit 需要合并
编辑上面命令产生的文本,将需要合并的 commit 前的
pick
改成squash
,然后保存退出 -
提交新的合并后的 commit
git push -f
到远程仓库
-
不跟踪指定文件
在.gitignore
中添加不被跟踪的文件或者文件夹:
# 排除所有。开头的隐藏文件:
.*
# 排除所有.class 文件:
*.class
# 不排除.gitignore 和 App.class:
!.gitignore
!App.class
或者:
git pull --force <remoterespro> <remotebranch>:<hostbranch>
删除 untrack files
-
删除当前目录下 untrack 文件,不包括文件夹和.gitignore 中指定的文件和文件
git clean -f
-
删除当前目录下 untrack 文件和文件夹, 不包括.gitignore 中指定的文件和文件夹
git clean -df
-
删除当期目录下的所有 untrack 的文件和文件夹
git clean -xdf
-
显示会被删除的文件
git clean -nxfd
git clean -nf
git clean -nfd
删除 unstaged 修改
git restore .
cherry-pick 某个提交到当前分支
-
添加目标分支到远程分支
git remote add testA http://123.123.123.git
-
下载对应的目标分支到本地
git fetch testA dev:cherry-pick-branch
这里的
testA
就是你之前起的 alias,dev
就是你想 cherry-pick 的分支,cherry-pick-branch
是你想把远程的代码拉到本地的那个分支,(一般是新起一个分支,比较干净)。 -
cherry-pick 目标提交
git cherry-pick commitNo
这里的
commitNo
就是你在项目 A 里面的提交 commit 号码。
查看差异
git diff [--name-status]
解决二进制文件冲突
git checkout FILE --ours [ --theirs ]
–ours 表示检出当前分支,即保存当前分支的改动,丢弃另外分支的改动。 –theirs 表示检出另外分支,即保存另外分支的改动,丢弃当前分支的改动。
push 指定本地分支到远端指定分支
git push origin local-branch-name:remote-branch-name
Git 仓库管理忽略 DS_Store 文件
DS_Store 文件是 mac 系统下访达使用的文件,其本身对于正常文件没有任何影响,所以需要做 git ignore:
-
将 .DS_Store 加入全局的 .gitignore 文件,执行命令:
echo .DS_Store >> ~/.gitignore_global
-
将这个全局的 .gitignore 文件加入 Git 的全局 config 文件中,执行命令:
git config --global core.excludesfile ~/.gitignore_global
文档信息
- 本文作者:Zhuojun Miao
- 本文链接:https://miaozhuojun.github.io/wiki/git/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)