Git

.gitconfig 的个人配置,将不断更新

mygitconfig

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

文档信息

Search

    Table of Contents