Git

git配置

官方文档 https://git-scm.com/docs/git-config/
linux和windows混用时常常需要注意两种配置:

  1. core.autocrlf
    windows下推荐设置为true。

    配置项的描述:
    Setting this variable to “true” is the same as setting the text attribute to “auto” on all files and core.eol to “crlf”. Set to true if you want to have CRLF line endings in your working directory and the repository has LF line endings. This variable can be set to input, in which case no output conversion is performed.

  2. core.filemode
    windows系统下推荐设置为false。如果没有设置为false的话,有可能会遇到这种问题,即无论你怎么使用git checkout 都无法撤消修改,使用git diff查看改动时显示 old mode 100755
    new mode 100644类似信息。

    配置项的描述:
    Tells Git if the executable bit of files in the working tree is to be honored.

    Some filesystems lose the executable bit when a file that is marked as executable is
    checked out, or checks out an non-executable file with executable bit on. [git-clone(1)]
    (https://www.kernel.org/pub/software/scm/git/docs/git-clone.html) or [git-init(1)]
    (https://www.kernel.org/pub/software/scm/git/docs/git-init.html) probe the filesystem to
    see if it handles the executable bit correctly and this variable is automatically set as
    necessary.

    A repository, however, may be on a filesystem that handles the filemode correctly, and
    this variable is set to true when created, but later may be made accessible from
    another environment that loses the filemode (e.g. exporting ext4 via CIFS mount, visiting
    a Cygwin created repository with Git for Windows or Eclipse). In such a case it may be
    necessary to set this variable to false. See [git-update-index(1)]
    (https://www.kernel.org/pub/software/scm/git/docs/git-update-index.html).

    The default is true (when core.filemode is not specified in the config file).

常用命令

查看git的本地设置信息
git config -l

查看remote库信息
git remote -v

把本地分支推到远端
git push origin [本地分支名]

上传文件到指定的分支
git push origin branch-name

向远程仓库推送代码
git push [远程库名] [本地分支名] : [远程分支名]

git clone完成后,Git会自动为你将远程仓库命名为origin,origin是一个仓库名的别名。git remote -v可以查看origin代表的仓库的地址,或者查看.git/config文件查看origin的含义。
git clone [远程代码URI]
git clone http://username:password@ip/路径/文件名

clone依赖多个submodule的项目
git clone --recurse-submodules

删除远程版本
git push origin :br-1.0.0

删除远程分支
git branch -r -d origin/branch-name
git push origin :remote-branch-name

查看本地分支对应的远程分支
git branch -vv

创建并切换到本地新分支
git checkout -b branch-name

基于远程分支创建本地分支
git checkout -b branch-name origin/remote-branch-name
或者
git checkout --track origin/remote-branch-name

基于某个commit创建分支
git branch branch-name start-point

基于某个commit创建分支
git checkout [-m] [ [-b | – orphan ] ] [start_point]

基于当前所在分支新建一个赤裸裸的分支,没有任何的提交历史,但是当前分支的内容一一俱全
git checkout --orphan branch-name

让一个本地分支跟踪到一个远程分支上
如果当前分支没有跟踪到远程某个分支,则在对该分支操作远程时会提示:
There is no tracking information for the current branch.
Please specify which branch you want to rebase against.
See git-pull(1) for details.
git pull
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/ test

让一个分支跟踪到另一个分支(也适用于将已有的本地库推到远程的新建的空库)
git branch --set-upstream-to origin

让一个分支取消跟踪流,注意取消的对象是分支的跟踪流,命令操作的对象是分支,而不是分支的跟踪流。
git branch --unset-upstream <待取消跟踪流的分支>

不追踪一个已经追踪过的文件
git rm --cached file-name

如果某些文件已经被跟踪了, 再放入到.gitinore可能会失效, 用以下命令来忽略
git update-index --assume-unchanged filename
撤销用:
git update-index --no-assume-unchanged filename

回退到某个commit
git reset --[hard|soft] commit-id

从远程拉取版本库,不包括工作区。传说中的裸版本库。
git clone --bare

从远程拉取版本库,不包含工作区。但可以同远程版本库使用git fetch命令进行持续同步。
git clone --mirror

只有裸版本库的情况下,可以使用git clone <本地裸版本库>得到工作区代码。

git中的特殊符号代表的意思
https://git-scm.com/docs/revisions/2.11.0

本地当前开发分支为A,先需要向远程仓库remote1的B分支和远程仓库remote2的C分支推送代码。
总体推送格式:git push [远程库名] [本地分支名] : [远程分支名]

  1. 如果你本地分支跟远程的分支名一样,那很简单,直接:
    git push coding branch1
    git push github branch1
    而且也建议这种方式。
  2. 如果你本地分支跟远程分支不一样,那如下:
    git push coding localbranch:branch1
    git push github localbranch:branch1
    非常不建议这样使用,本地分支跟远程分支一一对应起来是最好的管理方式。
  3. 如果你每次本地分支更新之后都需要同步到两个远程仓库,每次都手动push各个仓库未免有些麻烦,于是就有了下面这种方式:
    git remote add all http://github.com
    git remote set-url origin --push --add http://coding.net
    git remote set-url origin --push --add http://github.com
    上述代码什么意思呢?就是你设置了一个all的远程仓库,这个all关联了coding和github的远程地址,以后只需要执行:
    git push all branch
    就直接向以上两个远程仓库同时push代码了。

git clone --reference
–reference[-if-able]
If the reference repository is on the local machine, automatically setup .git/objects/info/alternates to obtain objects from the reference repository. Using an already existing repository as an alternate will require fewer objects to be copied from the repository being cloned, reducing network and local storage costs. When using the --reference-if-able, a non existing directory is skipped with a warning instead of aborting the clone.
NOTE: see the NOTE for the --shared option, and also the --dissociate option.

git repack -a
git fetch --all --tags
git clean -xdf

git checkout撤销未提交的修改
git checkout // 撤销指定的文件
git checkout . // 撤销所有改动

git reset
git reflog

git log --graph --decorate -all --oneline

git merge --no-ff
–no-ff指的是强行关闭fast-forward方式。
fast-forward方式就是当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commit
git merge --squash 是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用–squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit来“总结”一下,然后完成最终的合并。

你可能感兴趣的:(工具)