git用法tips


下载远程仓库的更新,但不变更到本地中

git fetch

checkout远程分支并进行分支跟踪

假设远程上有一个分支名称为dev,且还没有checkout到本地,那么可用以下命令将其checkout到本地的一个新的分支,并让该新分支跟踪该远程分支

git checkout -b LOCAL_BRANCH_NAME origin/dev

其中的LOCAL_BRANCH_NAME可替换成你自己想要的任何名字,一般建议保持与远程分支同名,便于管理。

stash用法

储藏(Stashing)

经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。

“‘储藏”“可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。

暂存工作空间

当需要暂存工作空间时,需要先把需要暂存的修改用git add命令将那些修改加进来,不然未加进来的是无法缓存起来的,然后再运行 git stash 命令

git add .   ## 这是将当前所有修改都加进来的最简便的命令,如果已经加好可以不用该命令
git stash   ## 注意,只会缓存已经 git add 过的修改。

git stash 是暂存工作空间命令git stash save命令的简写,一般来说建议还是使用git stash save命令,因为该命令可以添加选项,带来更丰富更实用的用法,如下

git stash save "YOUR MESSAGE"       ## YOUR MESSAGE 替换为你自己想要的备注消息,这样子在查看暂存空间时更容易区分每个暂存空间的用途

git stash save -u "YOUR MESSAGE"    ## 该命令比较有用,有了 -u 参数,那些没有被 git add 进来的文件,也会被保存到暂存空间中,免却了git add的麻烦 

git stash save -a "YOUR MESSAGE"    ## 通过 -a 参数,除了包括 -u 参数的功能,另外把那些被配置成忽略(ignore)的也会被暂存起来

显示已暂存的列表

当有多个暂存空间时,可用以下命令列出列表

git stash list

查看某个暂存空间与它的父空间(即该暂存空间被暂存时的工作空间)的变化差别

git stash show <stash_version>  ## <stash_version>可不用给出,即默认使用最后保存的那一次暂存空间

恢复某一个暂存空间到当前空间

恢复某一个暂存空间,有两种方式,一种是apply方式,另一种是pop方式,两种方式的区别在于,pop会在恢复的同时删除掉该暂存空间版本,而apply不会。

git stash apply <stash_version>     ## 若不给出 <stash_version> 选项值,则默认是最近一次的暂存版本

git stash pop <stash_version>       ## 恢复的同时,还会顺便删除掉该空间版本

删除某一个暂存空间版本

git stash drop <stash_version>            ## 若不给出 <stash_version> 选项值,则默认是最近一次的暂存版本

清空所有的暂存空间版本

git stash clear

清理当前工作空间的未跟踪文件

git clean 有多个选项参数,一般需要几个选项参数搭配着一起用,参数含义如下:

-d    ## 清除未跟踪的文件夹,没有 -d 参数时只会清楚文件,而不会清楚文件夹
-n    ## 未实际运行清理,只是显示如果执行清理的话会清理哪些文件
-i    ## 以交互方式执行清理
-x    ## 对于被 .gitignore 所忽略的都进行清除
-X    ## 只清除 .gitignore 所忽略的

注意:当需要清除文件夹时,都需要带上 -d 选项。

配置当前project的用户相关信息

有时一台机器上多人同时使用git,那么配置全局的用户信息就不太妥当,那么可以对每个project单独配置用户信息,方法就是在该project的目录下时,使用以下两个命令即可,其实就是比全局配置少了 –global 选项而已

git config user.email "YOUR EMAIL"
git config user.name "YOUR NAME"

添加远程仓库的路径

git remote add origin REMOTE_URL

REMOTE_URL为远程地址,可为git方式或http方式

创建远程分支

将本地分支 LOCAL_BRANCH 推送到远程仓库,并命令为 REMOTE_BRANCH ,命令如下

git push origin LOCAL_BRANCH:REMOTE_BRANCH

若顺便想让本地分支跟踪所创建的远程分支,那么可以加上 -u 参数,如下

git push -u origin LOCAL_BRANCH:REMOTE_BRANCH

删除远程分支

git push origin :REMOTE_BRANCH

查看本地分支与远程分支的跟踪关系

git branch -vv

更换或设置本地分支所跟踪的远程分支

git branch LOCAL_BRANCH -u origin/REMOTE_BRANCH

用本地当前分支新建一本地分支

只是新建本地新分支,但工作空间仍停留在原来的分支,命令如下

git branch NEW_LOCAL_BRANCH

若想在新建本地新分支的同时切换到新分支下,命令如下

git checkout -b NEW_LOCAL_BRANCH

删除本地分支

git branch -d LOCAL_BRANCH

有时删除时会因为某些原因而报错无法删除,如果需要的话可使用强制删除

git branch -D LOCAL_BRANCH

查看特定文件的提交历史

git log -p <file>

查看特定文件在什么时候被谁改过

git blame <file>
git blame -w  # 忽略移除空白这类改动
git blame -M  # 忽略移动文本内容这类改动
git blame -C  # 忽略移动文本内容到其它文件这类改动

放弃工作空间的所有本地修改

git reset --hard HEAD

放弃特定文件的本地修改

git checkout HEAD <file>

快速切换到上一次的分支

git checkout -

查看本地哪些分支已经合并进当前所在分支

git branch --merged

查看本地哪些分支还没有合并进当前所在分支

git branch --no-merged

删除本地分支里那些已经合并进当前所在分支的本地分支们

git branch --merged | xargs git branch -d

忽略文件跟踪

在和他人合作时可能常常意味着你需要更改一些配置才能让应用在环境里跑起来,这时,常常会不小心把这些只对你有意义的配置文件也给提交了。为了不再常常关注这些文件,看着它们在git status时放肆的显示“modified”,你可以告诉git忽略它们的改动。这种方式,可以看成是一种和仓库绑定的gitignore文件

git update-index --assume-unchanged <path/file>

让分支的历史归零

不管出于啥理由,有时从头开始正是你需要的。也许是你接手了一个不确信能安全开源的代码仓库;也许是你要着手做些全新的事情;也许是你想创建用于其它目的一个新分支,又希望继续在仓库里维护它(比如:github页面,项目的文档一类的东西)。上述的情形下,你可以非常简单的创建一个没有提交历史的分支

git checkout --orphan <branch>

从另一分支获取文件内容而不用切换分支

设想你正在进行重构,你创建了好几个分支并在各分支下进行改动。这时,你想把另一个分支里某一个文件的改动引入到当前工作的分支里,为了达到目的你可能需要好几步:git stash你的改动;切换到那个分支;获取文件的改动;切回工作分支(当然是使用git checkout -);继续进行编辑(译者注:别忘了git stash pop)。但是,你也可以直接检出另一分支的文件,并且合并到你当前所在的工作分支,使用命令

git checkout <branch> -- <path/file>

文章分类