Git基础命令(二)

1、设置别名alias

git的命名有时候特别的长,使用起来不是那么的方便,所以它提供了一个命令:alias。通过给命令设置别名,可以方便我们的操作。

如下所示:

git config --global alias.co checkout #给checkout设置别名co

git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative" #设置日志清晰显示

还有很多命令,可以按照自己的习惯定义。最后奉上查看所有配置的命令:git config -l

MeWifi:demo cjy$ git config -l
core.excludesfile=~/.gitignore
core.legacyheaders=false
core.quotepath=false
mergetool.keepbackup=true
push.default=simple
color.ui=auto
color.interactive=auto
repack.usedeltabaseoffset=true
alias.s=status
alias.a=!git add . && git status
alias.au=!git add -u . && git status
alias.aa=!git add . && git add -u . && git status
alias.c=commit
alias.cm=commit -m
alias.ca=commit --amend
alias.ac=!git add . && git commit
alias.acm=!git add . && git commit -m
alias.l=log --graph --all --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(white)- %an, %ar%Creset'
alias.ll=log --stat --abbrev-commit
alias.lg=log --color --graph --pretty=format:'%C(bold white)%h%Creset -%C(bold green)%d%Creset %s %C(bold green)(%cr)%Creset %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
alias.llg=log --color --graph --pretty=format:'%C(bold white)%H %d%Creset%n%s%n%+b%C(bold blue)%an <%ae>%Creset %C(bold green)%cr (%ci)' --abbrev-commit
alias.d=diff
alias.master=checkout master
alias.spull=svn rebase
alias.spush=svn dcommit
alias.alias=!git config --list | grep 'alias.' | sed 's/alias.([^=]*)=(.*)/1	 => 2/' | sort
include.path=~/.gitcinclude
include.path=.githubconfig
include.path=.gitcredential
diff.exif.textconv=exif
credential.helper=osxkeychain
core.excludesfile=/Users/cjy/.gitignore_global
core.quotepath=false#显示中文文件名
difftool.sourcetree.cmd=opendiff "$LOCAL" "$REMOTE"
difftool.sourcetree.path=
mergetool.sourcetree.cmd=/Applications/SourceTree.app/Contents/Resources/opendiff-w.sh "$LOCAL" "$REMOTE" -ancestor "$BASE" -merge "$MERGED"
mergetool.sourcetree.trustexitcode=true
user.name=xxx
user.email=xxx@126.com
alias.co=checkout
alias.c=commit
alias.st=status
alias.br=branch
alias.lg=log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative#日志比较清晰的设置
color.ui=true
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true

2、配置编辑器:git config --global core.editor "vim" #设置Editor用Vim,前提是本机有安装

3、代码比对命令:git diff 只能比对当前文件和缓存区(未执行git add)的文件差异

它还有其他的用法:

git diff <$id1> <$id2> # 比较两次提交之间的差异
git diff <branch1>..<branch2> # 在两个分支之间比较
git diff --staged # 比较暂存区和版本库差异

4、切换与撤销:checkout

(1)切换:可以切换到分支,版本tag,某次提交(commit_id:某次提交的sha1值,可以通过log查看)git checkout v1.0

(2)撤销git checkout a.md 只能撤销还没有add进去缓存区的文件

5、git stash命令:前提是代码没有commit,这个命令可以把当前分支所有没有提交的代码先暂存起来,这时去执行git status几乎看不到代码的变动。然后执行git stash list就会看到暂存区有了一条记录。

那如何把暂存的代码还原回来呢?只有执行git stash apply,代码就会回来了,紧接着最好将暂存区的这次记录删除,执行:git stash drop,就是把最近的一条stash记录删除。

这样子的步骤有点繁琐,其实有更简单的方法:git stash pop,不但会帮你把代码还原,还是帮你把这条暂存区记录删除。虽然用起来方便,但是使用起来更需谨慎。

最后一个命令介绍下:git stash clear 清空暂存区记录。

6、merge和rebase:都是合并的意思

它们的使用步骤一样:

git checkout master

git merge a

git checkout master

git rebase a

它们的区别在于,merge比较暴力,直接将代码放到一块区域,你可以清楚的知道这块代码从哪里来的;而rebase则是将代码进行比较,然后重新排序放置好,这样做的好处是合并后看起来比较有逻辑,但是你很难知道它是从哪来的。

举个例子,两个书架合并。merge就是直接腾出一个空间放置另一书架上的书。rebase则是将书按照一定的规则排序再放好,这样就很难知道这些书是从哪个书架搬过来的。

7、解决冲突

由于团队合作,提交冲突是难免的。假设A、B都对共同的模块做出修改,A先提交了,然后B再提交,这时候就会发生冲突了,因为Git本身没办法判断谁改的对,它就会提示conflicts,需要手动解决冲突才可以再次提交。

一般冲突的格式有<<<<<<<<<<HEAD =========== >>>>>>xxx类似的提示文本,代表发生冲突。我们可以根据具体情况保留哪些代码,然后把这些格式符号删除掉,最后进行一次commit就OK了。

原文地址:https://www.cnblogs.com/hacjy/p/7154139.html