Category: Git

  • git 分支重命名 rename branch

    本地 branch 重命名 foo => bar

    1. 本地重命名,切到分支 foo

    git branch -m bar

    或者直接重命名

    git branch -m foo bar

    2. 如果分支已经在远端,查看远端 origin

    git remote show origin
    
      Remote branches:
        foo    tracked
        master tracked
      Local branch configured for 'git pull':
        master merges with remote master
      Local refs configured for 'git push':
        foo    pushes to foo    (up to date)
        master pushes to master (up to date)
    

    这就需要把本地分支 bar push 上去,把 foo 分支删掉

    git push origin :foo bar
     - [deleted]         foo
     * [new branch]      bar -> bar
    

    最后在本地的 bar 分支下把 upstream 设置好

    git push origin -u bar
    Branch bar set up to track remote branch bar from origin.
    

    查看远端 origin

    git remote show origin
    
      Remote branches:
        bar    tracked
        master tracked
      Local branches configured for 'git pull':
        bar    merges with remote bar
        master merges with remote master
      Local refs configured for 'git push':
        bar    pushes to bar    (up to date)
        master pushes to master (up to date)
    

    删除远端分支

     git push origin :feature/upgrade-gke                                                                                                                    master * ] 12:02 PM
    To github.com:xxx/yyy.git
     - [deleted]         feature/upgrade-gke
  • git stash

    保存当前工作

    git stash

    查看 stash 列表

    git stash list

    切回某次工作

    git stash apply stash@{3} 
    

    切回最近一次保存的工作

    git stash pop 相当于
    git stash apply stash@{0}
    

    删除某个 stash

    git stash drop stash@{1}
    
  • git diff 换行

    git --no-pager diff

    or

    git diff --color | less -R

    显示改动过的文件

    git diff --staged --name-only  | cat
    

    比较 feature 分支和 master 分支具体一个文件的变动

    git diff feature/sftp-server master -- .gitlab-ci.yml
    

    https://stackoverflow.com/questions/4099742/how-to-compare-files-from-two-different-branches

  • git notes

    level 6

    rebase

    git fetch只获取,并不合并

    本地与远端使用git rebase
    git rebase进行了三步操作

    把所有master的改变放到一个临时区域里面

    运行所有origin/master的提交

    运行在临时区域的commits

    本地两个分支间的rebase,master和  develop均有提交

    在develop分支下,

    git rebase master

    然后再git checkout master

    把develp合并过来

    git merge develop

    conflicts本地master和远端origin/master都修改了同一个文件,并在本地提交

    解决冲突

    在master上git fetch

    然后git rebase,这样保证在master上有最新的代码

    这里会提示有冲突

    当解决了问题,则用git rebase –continue

    level 7

    git log
    sha hash

    git config –global color.ui true

    git log –pretty=oneline

    git log –oneline –stat

    当前分支与 master 的区别

    git log --oneline  ...master
    

    git log -p 查看具体的改变

    git diff  == git diff HEAD
    git diff HEAD^

    git diff HEAD~5
    git diff HEAD^..HEAD

    git diff sha..sha
    git diff master develop

    对于单个文件一直以来的变化
    git blame index.html –date short
    git status 看到有不想提交的,则在 .git/info/exclude 把文件过滤掉

    .gitignore
    git 删除文件
    git rm README.txt
    在 system 中不会被删除,但在 git 中会删除
    git rm –cached development.log

    mac 指定 merge 工具

    git config --global merge.tool opendiff
    git config --global alias.st status 来设置 status 的别名
    

    level 4

    git push rejected
    

    首先git pull

    pull的动做细分

    git fetch到origin/master

    将origin/master合并到本地  master

    git merge origin/master

    现在再push

    conflict

    必须手动解决

    level 1

    查看staged文件做了哪些改动

    git diff –staged

    在提交的同时进行添加

    git commit -a -m “add index”

    将修改的文件恢复

    git checkout — cats.html index.html

    level 2

    undo上一次提交,并将改变放到 staging 中

    git reset --soft HEAD^

    只修改上一次的提交

    git commit --amend -m "New Message"
    

    undo 上一次的提交和修改,你的修改会丢失

    git reset --hard HEAD^

    undo 上两次的提交和修改

    git reset --hard HEAD^^

    git reset HEAD ostrich.html

    查看远端的 fetch 及 push地址
    git remote -v

    git remote add <name> <address>

    删除远端 repo
    git remote rm <name>

    git push -u origin master

    origin是远端 repo 的名字, master 是本地分支的名字

    设置 git config user

    git config --global --edit
    #全局配置在 ~/.gitconfig
    [user]
        name = myusername
        email = [email protected]
    
    当前项目配置在
    .git/config
    

    想要保存一个空目录时,一般添加一个空文件.gitkeep,比如

    secrets/.gitkeep

    macOS 自动保存到 keychain

    git config --global credential.helper osxkeychain
    
  • git用久了之后变的很大

    .git/objects/pack/pack-376650db9982f82b2036b0f9f0d28f47be9809e3.pack

  • gitlab fork库与源库保持更新

    fork 之后做自己的功能,要与源库进行功能合并时用 MergeRequest

    但是如果自己的库与源库落后太多,则可以这样

    查看远程 repo

    git remote -v

    如果里面只能看到你自己的两个源(fetch 和 push),那就需要添加主repo的源:

    git remote add upstream URL
    git remote -v
    

    如果想与主repo合并:

    git fetch upstream
    git merge upstream/master
    或 git rebase upstream/master