caleben

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 

配置命令(config)

git config -e 编辑配置文件
git config --local -e 编辑仓库级别配置文件
git config --global -e 编辑用户级别配置文件
git config --system -e 编辑系统级别配置文件

设置当前项目作者名称:git config user.name [userName]
设置当前项目作者邮箱:git config user.email [email]

设置别名,简写操作:git config --global alias.[aliasName] [commandName] // 如:git config --global alias.st status,

本地配置路径: [当前项目]/.git/config

全局配置路径: [用户]/.gitconfig 配置可以直接编辑 .gitconfig 文件,更方便,如下: [user] name = Barrior email = barrior@qq.com [alias] st = status co = checkout br = branch ci = commit

 

远程仓库相关命令

克隆远程仓库:git clone [ -b remote_branch_name ] git://github.com/jquery/jquery.git

查看远程仓库:git remote -v

添加远程仓库:git remote add [name] [url]

删除远程仓库:git remote rm [name]

修改远程仓库:git remote set-url --push [remoteName] [newUrl]

拉取远程仓库并合并:git fetch [remoteName] [remoteBranchName]:[localBranchName] //拉取远程仓库的remoteBranchName分支,并在本地创建localBranchName分支,合并在本地分支中 git fetch origin branch1 设定当前分支的FETCH_HEAD 为远程服务器的branch1分支(如果远程branch1分支不存在会抛出异常) git merge FETCH_HEAD 合并在当前分支中 git fetch origin :branch2 等价于 git fetch origin master:branch2

拉取远程仓库:git pull [remoteName] [remoteBranchName]:[localBranchName]

推送远程仓库:git push [remoteName] [localBranchName]:[remoteBranchName]

将本地代码推到新建
(远程库中历史记录为空)的远程仓库中:
初始化本地:git仓库:git init
添加远程仓库:git add remote origin [url]
强制推送;git push origin master:master --force

 

同步私库与主库命令

首先添加主库源:git remote add [upstream] [url]

更新主库到本地:git remote update upstream

切换到相应分支:git checkout [branch_name]

将主库信息merge到本地:git rebase [upstream]/[branch_name]

同步分支tag信息:git fetch --prune  或  git fetch -p

 

分支命令(branch)

查看本地分支:git branch

查看远程分支:git branch -r

查看所有分支:git branch -a

创建本地分支:git branch [name] // 注意新分支创建后不会自动切换为当前分支

切换分支:git checkout [branchName]

创建新分支并立即切换到新分支:git checkout -b [name]

删除本地分支:git branch -d [branchName] // [-d]选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用 [-D] 选项

删除远程分支:git push origion --delete branchname

合并分支:git merge [branchName] // 将名称为[branchName]的分支合并到当前分支 将A分支所有的改变都添加到master分支来:1.切换到master分支 2.git rebase A 3.这个时候,git做了些什么呢? a.先将test分支的代码checkout出来,作为工作目录 b.然后将master分支从test分支创建起的所有改变的补丁,依次打上。如果打补丁的过程没问题,rebase就搞定了 c.如果打补丁的时候出现了问题,就会提示你处理冲突。处理好了,可以运行git rebase –continue继续直到完成 d.如果你不想处理,你还是有两个选择,一个是放弃rebase过程(运行git rebase –abort),另一个是直接用test分支的取代当前分支的(git rebase –skip)。

将本地分支push到远程:git push [remoteName] [localBranchName]:[remoteBranchName] // 如果远程分支不存在,则自动创建远程分支 删除远程分支: 在Git v1.7.0 之后,可以使用这种语法删除远程分支:git push --delete origin branchName 否则,可以使用这种语法,推送一个空分支到远程分支,其实就相当于删除远程分支:

git push origin :[remoteBranchName] 1、如果本地分支和远程分支存在对应关系,则可以直接在分支下通过 git push 提交到远程分支。

2、查看远程仓库分支与本地仓库分支的对应关系(pull,push),如以 origin 仓库为例:git remote show origin

3、本地的某个分支提交到远程仓库某个分支,以本地 test 分支为例,如下: git push [remoteName] test:master // 提交本地 test 分支作为远程的 master 分支 g git push [remoteName] test:test // 提交本地 test 分支作为远程的 test 分支 4、将代码提交到多个不同仓库的不同分支: https://www.v2ex.com/t/95460 git remote add github [url] git remote add gitcafe [url] git push github master:master g git push gitcafe master:cafe-pages

 

合并命令(merge/rebase)

将分支a合并到b上
git checkout b
git merge a   或者  git rebase a


【注】merge会有合并痕迹;rebase使记录线形化更清晰。
rebase :如果在a分支上rebase b 则记录是将b的新记录拷贝到a,然后将a的新记录接在b后面。即在哪个分支上使用命令,最新记录就是哪个分支上的。

 

回撤命令(reset)针对将已提交到版本库或缓存区的文件恢复到之前的某个版本。

回撤命令模板:git reset [--param] [commit id]

回撤到指定版本:git reset --hard 9ca489438651f44cf65366e3bfab09527c8235ae 【日志上的commit id,使用 git log 查看】

回撤到上1个版本:git reset --hard HEAD~1

回撤到最新版本:git reset --hard HEAD

回撤到远程的上0个版本: git reset –-hard [remoteName]/[branchName] // 即远程仓库最新的版本,如:git reset –-hard origin/master

回撤参数解释:

--mixed reset HEAD and index 默认选项。版本库和缓存区都滚到指定的版本,但工作目录不受影响

--soft reset only HEAD 仅仅回撤版本库,缓存区和工作目录都不会被改变

--hard reset HEAD, index and working tree 所有文件都不会保留

--merge reset HEAD, index and working tree 合并指定版本与现在暂存区与工作区的文件

--keep reset HEAD but keep local changes

回撤已经push到远端库中的提交

1,先拉取代码reset到想要的版本号aaa: git reset --soft aaa

2,强制push到远端库: git push origin --force

3,可选)git add. /   git commit /   git push origin

 

回撤命令(checkout)针对将已修改的工作区文件,但还未提交到版本库或缓存区时,恢复到未修改的状态。(WebStorm 编辑器里叫 revert,这里的 revert 还可以回撤已经提交到缓存区的文件)

通过一个新的commit 来使仓库倒退一个commit: git revert

撤销未提交的某个修改:git checkout file_name

撤销某个文件到指定的版本:git checkout commit_sha1_version  path_to_file_name

撤销所有未提交的修改:git checkout .

差异对比命令(diff) 查看工作区与暂存区(index)之间的差异:git diff [file]
查看当前状态:git status 查看暂存区与local current HEAD commit (local repository)之间的差异 
查看缓存区与版本之间的差异:git diff --cached [file] 或 git diff --staged [file] // 如果没有file,则列出所有文件的差异 其他命令  
提交某个文件(工作区)到缓存区:git add [path]
// [path]可以是文件也可以是目录 提交所有文件到缓存区:git add .
提交缓存区文件到版本库:git commit
-m 'message' 直接提交工作区文件到版本库:git commit -am 'message' // [-a]代表add,注:这个命令会提交所有修改的文件,但不会提交新建的文件
查看提交日志:git log 或 git log -2 查看2条记录
查看指定文件的提交历史:git log
-p [file]

 

git stash

git stash save message 默认保存进度后,工作区与缓存区与 HEAD 保持一样

git stash save --keep-index "some-save-message" 保存进度后已添加到缓存区的内容保持不变 git stash对当前的暂存区和工作区状态进行保存。

git stash list 列出所有保存的进度列表。

git stash pop [--index] [] 恢复工作进度 --index:不仅恢复工作区还恢复暂存区。 :指定恢复某一个具体进度。如果没有这个参数,默认恢复最新进度

git stash drop []删除某一个进度,默认最新进度

git stash clear  删除所有进度

git stash branch  基于进度创建分支

 

git tag

git tag  显示所有tag  

git checkout -b newBranch srcTag  将tagxxx的代码拉取到新建的分支tagBranch

git tag -a tagname -m "V1.0.xx" 新建tag

git tag -d tagname 删除tag

git push origion --delete tag tagname

git tag -l 'v1.5.*'  搜索符合模式的所有标签

git push并不会将tags推送到远程仓库,只有显式的增加参数--tags才能实现将tags同步到远程仓库

git push origin tagname

git push [origin] --tags

git 查看某个文件修改记录

git log --pretty=oneline path/to/file

git blame path/to/file

git 处理冲突

lab4 $ git merge lab3
<<<<<<< HEAD
world
=======
hadoop
>>>>>>> lab3
以上代码代表的意思是lab4中的原有内容:world lab3中的内容:hadoop
方法一(通用,手动编辑解决):解决办法就是我们手动编辑去掉冲突,即先编辑再git commit提交。对git来讲,编辑冲突跟修改代码没什么差异,修改完之后添加到缓存,然后再commit
方法二: a.保留主库所有改动,完成覆盖本地版本: git reset --hard git pull
b.保留主库改动,仅仅并入新的本地改动: git stash git pull git stash pop
方法三:[一个好用的工具:WinMerge]
使用工具 git mergetool 或者指定工具 git mergetool -t diffmerge 
[工具有meld,opendiff,kdiff3,tkdiff,xxdiff,tortoisemerge,gvimdiff,diffuse,ecmerge,p4merge,araxis,vimdiff,emerge]

 

posted on 2022-03-03 10:42  caleben  阅读(120)  评论(0)    收藏  举报