分支操作
1、同步远程分支到本地,并切换到该分支
git checkout -b local_branch orgin/remote_branch
2、删除本地分支
git branch -d branch_name
注意:在当前分支下是不能删除当前分支的,需要切换到别的分支。
3、删除远程分支
在Git v1.7.0 之后,可以使用这种语法删除远程分支:
git push origin --delete <branchName>
也可以使用这种语法,推送一个空分支到远程分支,其实就相当于删除远程分支:
git push orgin :develop/hotfix #我的分支名叫develop/hotfix
4、本地创建分支并提交远程
1、先切换到要拉分支的分支上,比如现在有一个develop分支,我想拉一个develop/hotfix分支:
git checkout develop
2、创建一个本地分支并切换到该分支:
git checkout -b develop/hotfix
这样写可能会有问题,报错:
fatal: cannot lock ref 'refs/heads/develop/buxfix': 'refs/heads/develop' exists; cannot create 'refs/heads/develop/buxfix'
不应该包含当前分支develop的名字,改成feature/bugfix就可以了。
3、将此分支推到远程去:
git push origin develop/hotfix:develop/hotfix
4、这时候通过git remote show origin 查看发现本地还没有跟远程建立track信息,所以还需要:
git branch --set-upstream-to=origin/develop/hotfix develop/hotfix
这样就创建完成了。
5、撤销本次操作
1、只修改了某些文件,但是没有commit
git checkout . # 后面跟某个文件,或者跟 "."是全部文件
2、添加了某些新的文件,但是没有commit
如果我们直接用checkout的话,修改的文件是可以撤销的,但是新添加的文件还是无法撤销,git status 查看如下所示
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: BFSports/BFSports/Common/Util/BFSKeychain.h
new file: BFSports/BFSports/Common/Util/BFSKeychain.m
根据提示我们可以使用下面git reset HEAD <file>命令来撤销
git reset HEAD #如果后面什么都不跟的话 就是上一次add 里面的全部撤销了
git reset HEAD BFSports/BFSports/Common/Util/BFSKeychain.h #就是对某个文件进行撤销了
注意:reset后,文件还是存在的,需要手动删除一下文件,这样就彻底删除了。
3、撤销已经在本地commit的修改,但是没有push到远端
假如最近一次commit 哈希值是hash2,上一次哈希值是hash1,我想撤销掉最近的这次commit,则操作如下:
git reset hash1 #这时 git status 查看会有如下信息
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
这时候文件的状态都变成了modified了,注意modified前面没有“M”。这个时候就是出于文件刚被修改的最初状态了,即还没有add之前的。然后再:
git checkout <file> #然后再git status查看发现已经修改已被完全撤销了。
关于reset的讲解,有篇文章不错,讲了git维护的代码分为三个部分:当前工作目录,index,git仓库。如下图:
工作区示意图工作区的代码修改了,执行add操作后就添加到了index,再commit之后才到版本库。可以通过reset命令的 --mixed、--soft、--hard来控制回到哪个位置。默认是--mixed直接由git仓库回到工作区最初的修改状态;--soft是由工作区回到index,也就是add之后的状态;--hard是直接撤销到修改之前的状态。
文章链接:http://blog.csdn.net/codectq/article/details/50777934
5、修改用户名密码
当登录的用户名、邮箱、密码发生修改时,需要修改本地的git配置,如果你本地所有的仓库都是用的同一个账号密码可以这样修改
git config --global user.name xiaoming
git config --global user.email xiaoming@163.com
git config --global user.password 1234
如果有多个仓库且每个仓库对应的账号密码不一样,则只修改某一个仓库就可以了,首先进入到你要修改的某个仓库目录里面,然后执行
git config user.name xiaoming
git config user.email xiaoming@163.com
git config user.password 1234
其实就是没有 --global 参数。
小问题
1、比较两个版本所有修改的文件列表
git diff branch1 branch2 --stat
2、在gitlab上删除某个分支后,在本地执行
git pull
git branch -r
发现还有已删除的分支名称,执行以下代码就可以了
``
git fetch -p
``
3、今天在提交代码的时候,有如下错误提示:
fatal: The upstream branch of your current branch does not match
the name of your current branch. To push to the upstream branch
on the remote, use
git push origin HEAD:hotfix/start-2016-10-12
To push to the branch of the same name on the remote, use
git push origin hotfix
导致出现这个问题的原因是,我在将远程分支check到本地后,起了一个不同的名字:
git branch -b hotfix orgin/hotfix/start-2016-10-12
因为rename的原因git失去了hotfix分支跟远程分支的track.解决此问题一般有两个方式:
1、就是本地分支跟远程分支名字保持一致。
2、给rename后的分支重新跟远程分支建立track:
git checkout hotfix
git branch -u orgin/hotfix/start-2016-10-1
网友评论