1 Git 常用命令

版权声明:知识是属于全人类的,欢迎探讨和分享 https://blog.csdn.net/hukfei/article/details/68485056

教程:Pro Git

1. gitignore

git .gitignore 文件只能够忽略 untracked file ,对于已经 tracked 的文件,再加入 .gitignore 文件中是无效的。

若想忽略已经 tracked 的文件,可采取如下方式:

  • git rm --cached a.conf;将 a.conf 加入到 .gitignore 中,然后 commit & push
  • git update-index --assume-unchanged a.conf

Note:此种方式适用于你对某个文件做了修改,但仅限于 local branch。git update-index --no-assume-unchanged a.conf 命令可将 changes 释放出来。

.gitignore 过滤规则

  1. 所有的空行和 # 开头的行都会被 git 忽略(相当于不读取)
  2. 匹配模式最后跟反斜杠(/),说明要忽略的是目录
  3. 以 ! 来忽略指定模式以外的文件或目录(保守模式)
  4. 使用标准的 glob 模式匹配(shell 所使用的简化的正则表达式)

标准的 glob 模式匹配:

  • 匹配零个或多个任意字符;
    [abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
    ? 只匹配一个任意字符;
    如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
# 忽略以 .a 或 .o 结尾的文件
*.[oa] 
# 第二、三、四、五行告诉git忽略以~、swp、bak、DS_Store结尾的文件
*~
*.swp
*.bak
*.DS_Store
# 忽略logs目录下的所有文件
logs/*
# 忽略以a结尾的文件
*.a
# 跟踪core.a                      
!core.a 
# 忽略根目录下的 config文件,但 /abc/config 不会被忽略                 
/config
# 忽略logs目录                  
logs/
# 忽略doc目录下所有以pyc结尾的文件,但不包括 doc/abc/*.pyc                    
doc/*.pyc 
# 忽略doc目录下所有以pyc结尾的文件,包括 doc/abc/*.pyc                    
doc/**.pyc 
# 这两行表示只跟踪根目录下的www中的base目录               
/www/*
!/www/base/              

建立全局的过滤规则

在用户目录下新建一个 .gitignore 文件并添加过滤规则:

vim ~/.gitignore

添加过滤规则…,然后执行

git config --global core.excludesfile ~/.gitignore

对于配置文件,git 中可采取如下的方式配置:

remote repository 保存的应该是 a.conf.example 文件,当我们 clone 下来后,cp a.conf.example a.conf,再对 a.conf 进行修改,而 a.conf 应该是 git ignore 的。

2 . cherry-pick

git cherry-pick 用于把另一个本地分支的 commit 修改应用到当前分支。

Note:此命令只会合并当前 commit id 所修改的内容

usage:git cherry-pick <commit id>

3. log

git log 用于查看版本的提交记录。

usage:

  • git log --pretty=format:"%H , %an , %ar : %s" --stat -1
  • git log -p -1

4. reset & revert

resetrevert 的区别在于一个主要用于本地版本的回滚一个用于 remote server 上的回滚。

  • reset

usage:git reset --hard commit_id

Tips:可以使用 git reflog 命令来查看命令历史,以便回到回滚之前的版本。

  • revert

usage:git revert commit_id

Note:git revert 使用一次新的 commit 来回滚之前的 commit,所以 HEAD 是一直往前的;而 git reset 是直接删除指定的 commit ,HEAD 是向后移动的。

5. diff

  • 查看尚未暂存的文件更新了哪些部分。git diff
  • 查看已暂存起来的文件和上次提交快照(HEAD)之间的差异。git diff --cached
  • 显示工作版本和 HEAD 的差异。git diff HEAD
  • 显示当前目录和另一个分支的差别。git diff master
  • 显示目录下的某个目录和另一个分支的差别。git diff HEAD -- ./lib

6. stash

git stash save "some message" # save uncommited changes

git stash list # list stashed changes

git stash show stash@{n} # see stash change

git stash apply/pop stash@{n} # apply stash and remove it from the list

git stash drop stash@{n} # drop stash changes

git stash clear # clear all stash changes

git stash branch <branchname> stash@{n} # create branch base on stash

7 Git clone | init

克隆一个版本库,需要使用 git clone 命令:

git clone <版本库的网址> <本地目录名>

创建一个空的版本库或者重新初始化一个已存在的目录

git init

8 Git remote

为了便于管理,Git 要求每个远程主机都必须指定一个主机名,git remote 命令就用于管理主机名。

  • 查看远程主机的网址
git remote -v
  • 克隆远程仓库时指定远程主机名
git clone -o jquery https://github.com/jquery/jquery.git
  • 查看远程主机的详细信息
git remote show <远程主机名>
  • 添加远程主机
git remote add <主机名> <网址>
  • 删除远程主机
git remote rm <主机名>

重命名

git remote rename <主机名>

9 Git pull

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

完整格式:

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

若省略本地分支名,则表示默认与当前分支合并。

在某些场合下,Git 会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在 git clone 的时候,所有的本地分支默认与远程分支的同名分支就,建立追踪关系。

Git 也允许手动建立追踪关系

git branch --set-upstream <本地分支名> <主机名>/<远程分支名>

如果当前分支与远程分支存在追踪关系,git pull 就可以省略远程分支名

git pull origin

如果当前分支只有一个追踪分支,连远程主机名都可以省略

git pull

10 git push

git push 用于将本地分支的更新,推送到远程主机。

git push <主机名> <本地分支>:<远程分支>
  • 如果省略远程分支,则表示将本地分支推送到与之有追踪关系的远程分支(通常两种同名),如果该远程分支不存在,则会被新建。
git push origin master

如果省略本地分支和远程分支,表示将当前分支推送到与之有追踪关系的远程分支上。

git push origin

如果省略本地分支而远程分支存在,则表示删除指定的远程分支。

git push origin :master

如果当前分支只存在一个追踪分支,那么主机名也可省略。

git push

11 git branch

git clone只能clone远程库的master分支,无法clone所有分支,解决办法如下:

  1. 找一个干净目录,假设是git_work
  2. cd git_work
  3. git clone http://myrepo.xxx.com/project/.git ,这样在git_work目录下得到一个project子目录
  4. cd project
  5. git branch -a,列出所有分支名称如下
  6. git checkout -b dev origin/dev,作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支
  7. git checkout dev,切换回dev分支,并开始开发。

12 Git: ERROR: Permission to repo.git denied to user

Git: ERROR: Permission to repo.git denied to user

13 Git Tag

Git Tag 操作

14 带用户名密码检出 Repository

git clone https://user:[email protected]/{repository_url}

猜你喜欢

转载自blog.csdn.net/hukfei/article/details/68485056