Home » Git常用操作

Git常用操作

克隆仓库

克隆操作的命令是:

$ git clone <远程仓库地址> <本地存储目录>

其中,<本地存储目录>是可选的,如果不指定则是当前git进入的目录。另外远程仓库地址与本地存储目录之间除了使用空格链接,使用to连接也是可以的。

默认会克隆所有分支,如果只想克隆远程仓库的一个分支,通过-b参数指定,如:

$ git clone -b develop <远程仓库地址> <本地存储目录>

拉取操作

拉取操作的命令是:git fetch <远程主机名> <远程分支名>

拉取回来后,合并到当前分支(要合并到哪个分支得先切换):git merge <远程主机名>/<远程分支名>,可以通过查看git branch -rv查看详细是叫什么。

也可以使用pull,同时进行拉取的合并:

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

远程主机操作

查看都有哪些远程主机,命令是:

$ git remote -v

显示的结果是类似如下这样的:

origin https://git... (fetch)
origin https://git... (push)

为了方便管理,git会给每个远程仓库起一个远程主机名,主机名后边是对应的仓库地址。clone操作默认的主机名就是origin,如果想使用其他主机名,通过-o参数指定。如:

$ git clone -o xigua https://git... ./xigua

以下是常用的针对远程主机的操作:

git remote show <主机名> 查看主机详细信息,包含分支信息
git remote add <主机名> <仓库地址> 添加远程主机
git remote rm <主机名> 删除远程主机
git remote rename <原主机名> <新主机名> 重命名远程主机

分支操作

分支相关常用命令:

git branch 查看当前分支,加-v参数信息更详细
git branch -a 查看所有分支
git push <远程主机名> –delete <远程分支名> 删除远程分支,删除本地“远程”:git branch -dr <分支名>
git checkout <分支名> 切换到某分支
git merge master develop 切换到master分支,将开发中的develop合并到master分支上
git branch -m newname 将当前分支改名为newname
git branch -m oldname newname 将分支oldname改名为newname

推送操作

推送操作的命令是:

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

查看提交历史

查看最近提交历史命令是:

$ git log

要退出log命令模式只需要按一下键盘上的Q,注意无须回车。更多技巧参考这里

常用:git log –pretty=format:”%H %ci %an %s” –since=”2017-01-01″ –author=”a” –no-merges [–reverse] src/App/Controller/User/,最后是过滤发生在某个目录下的。

查看在A分支不在B分支:git log branch_B..branch_A,左边的是不在,右边的是在。

查看在A分支或B分支:git log branch_A…branch_B,注意是三点,上边是两点。

查看两个commit之间的提交:git log commit_A..commit_B,老的在前,不包括,新的在后,包括。

如果想看某个分支的提交历史,使用git cherry -v branch_name,或者git log branch_name [–no-merges]。

回退

$ git reset [--hard|soft|mixed] <commitid>|HEAD

hard、soft、mixed三种回退模式,hard是全部回退,自上次提交后的所有修改都丢失,源代码回归到上次提交时候。但我了下soft也是如此。commitid是40位的sha-1值,在提交历史中可以看到。HEAD表示表示上一次。详细的可以参考这里。在没有合并远程修改就在本地进行了commit时,进行过一次回退,感觉没找到正确的使用git的方法。

2016-08-28更新:对于工作区的更改要撤销,执行git checkout — <file>即可丢掉工作区的更改,回到最后一次提交到时暂存区时的内容。对于已经提交到暂存区(已经add)的更改要撤销,先执行reset HEAD <file>,文件被更新为最新一次提交时的状态,暂存区的内容回到工作区,再按前边撤销工作区的一更改操作,执行git checkout — file即可丢掉。对于已经添加到本地仓库(已经commit)的更改要撤销,需要查看提交历史,得到最近一次提交的commitid,执行git reset –hard commitid进行回退,这时,工作区和暂存区的更改都没了。如若要保留自commitid之后暂存区和工作区的内容,需要使用–soft参数,这样只是把HEAD指向commitid,执行完毕后,自从<commit>以来的所有改变都会显示在git status的”Changes to be committed”中。 详细参考上边链接。

查看设置

查看本地(本项目)设置:git config –local –list,注意是两个-。

查看全局设置:git config –global –list。注意是两个-。

要修改,本地(项目)配置文件是:项目目录/.git/config,公共配置文件是:个人目录/.gitconfig。

免登陆凭证

每次拉取提交都需要输入账号密码很是麻烦,可以生成免登陆凭证。进入个人目录~,执行:ssh-keygen -t rsa -b 4096 -C “your_email@example.com“,一路回车即可。默认会生成在~/.ssh目录下,查看,可以是cat ~/.ssh/id_rsa.pub。将之添加到账号配置中即可。如果发现不行,看看用的是不是https协议,建议使用git协议再尝试。

停止追踪某文件

要停止追踪一个文件,使用git rm –cached <path>。这会保持文件当前的状态,不删除文件,若同时要删除,添加 -f 参数。若没有-f不删除,这时git commit不会提交,但git status还是会显示有更改。要git status也不提示,需要添加到.gitignore。

查看区别

git diff commitidA commitidB。查看commitidB相对于commitidA发生了什么变化,查看新提交发生的变化,旧在前(为基准),新在后。如果只想看变化的文件不需要具体的信息,添加–stat参数。如果要具体到某个文件,在后边再接文件,如git diff HEAD 6aba894a71e9f9465cb0e6a3b3b646b795ea8d69 src/App/Views/Other/Console/list.htm。

git diff,查看工作区与暂存区的区别。git diff –cached,查看暂存区与最后一次提交(HEAD)的区别。git diff HEAD,查看工作区+暂存区与最后一次的区别。

查看两个分支的区别:
git diff <branch_A> = git diff <branch_A> <current_branch>,查看当前分支与A分支的区别,当前分支较新。

查看一个文件在两个不同分支中的区别:
git diff <branch_A> <branch_B> — <filename>,或者git diff <branch_A>..<branch_B> — <filename>

注:diff仅对已经追踪的文件有效,对于新建的没有add过的,是不会显示的。

合并commit

有时候为了简洁,将多个commit合并成一个(方便cherry-pick),使用git rebase -i <commitid>,比如要将A(最旧)+B(中间)+C(最新)三个commit合并成一个X,找到最旧A的前一个commitid,假如为prevA,执行git rebase -i prevA,在出现的界面中,第一个commit保持pick,后边的改为squash,保存提交,再次出现的界面会把所有commit的信息包含,可以改,也可以不改,保存退出就完成合并。详细可参考这里这里

git add

这是一个多功能命令。1、跟踪新文件;2、把已经跟踪的文件放入暂存区;3、合并时把有冲突的文件标记为已解决。总的可以理解为:添加内容到下一次提交中。

重做提交

有时候,在我们执行了一次commit后发现,漏了一点点,修改好后添加到暂存区进行commit太浪费了,只是多了那么一点点东西,再说都是同一个功能的,完全没有必要添加一个新的commit。又或者发现commit时提交的信息写得不对,需要修改。这两种情况都可以使用commit –amend来完成,它可以带上当前暂存区的更改把最近一次提交重做。

提交区间

在B分支而不在A分支的提交有哪些:git log B..A,在的写前边,不在的写后边

在B分支或C分支但不在A分支的提交有哪些:git log B C –not A。

在B分支或A分支中但不同时存在于这两个分支的提交有哪些:git log B…A。

替换文件

对于一个文件,想用A分支的替换掉当前分支的,可以使用checkout:git checkout A — <path>。然后进行commit,即可。

暂存文件

有时候要切换分支,又不想提交当前分支的修改,可以使用暂存功能:stash。

git stash save “备注信息”,进行一次暂存
git stash list,列出所有暂存
git stash apply stash@{数字索引},恢复到某次暂存
git stash pop stash@{数字索引},恢复到某次暂存并删除该暂存
git stash drop stash@{数字索引},删除某个暂存
git stash clear,删除所有暂存

注意:对于没有add过的文件(untracked files)不会被暂存!

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Time limit is exhausted. Please reload CAPTCHA.