主页 Git进阶
Post
Cancel

Git进阶

git - 简明指南:

1、检出仓库

执行如下命令以创建一个本地仓库的克隆版本:<sdafsdfsdf>

git clone /path/to/repository
1
如果是远端服务器上的仓库,你的命令会是这个样子:
git clone username@host:/path/to/repository
2、工作流

你的本地仓库由 git 维护的三棵“树”组成。第一个是你的工作目录,它持有实际文件;第二个是 暂存区Index,它像个缓存区域,临时保存你的改动;最后是HEAD,它指向你最后一次提交的结果。 1

3、添加和提交

你可以提出更改(把它们添加到暂存区),使用如下命令:

git add <filename>
git add \*
1
这是 git 基本工作流程的第一步;使用如下命令以实际提交改动:
git commit -m "代码提交信息"
1
现在,你的改动已经提交到了 HEAD,但是还没到你的远端仓库。

3、推送改动

你的改动现在已经在本地仓库的 HEAD 中了。执行如下命令以将这些改动提交到远端仓库:

git push origin master
1
2
可以把 master 换成你想要推送的任何分支。
如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:
git remote add origin <server>
1
 如此你就能够将你的改动推送到所添加的服务器上去了。

4、分支

1
分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是`默认的分支`。在其他分支上进行开发,完成后再将它们合并到主分支上。

1

创建一个叫做“feature_x”的分支,并切换过去:
git checkout -b feature_x
切换回主分支:
git checkout master
再把新建的分支删掉:
git branch -d feature_x
除非你将分支推送到远端仓库,不然该分支就是 不为他人所见的:
git push origin <branch>

5、更新与合并

要更新你的本地仓库至最新改动,执行:
git pull
1
以在你的工作目录中 获取(fetch) 并 合并(merge) 远端的改动。要合并其他分支到你的当前分支(例如 master),执行:
git merge <branch>
1
在这两种情况下,git 都会尝试去自动合并改动。遗憾的是,这可能并非每次都成功,并可能出现冲突(conflicts)。 这时候就需要你修改这些文件来手动合并这些冲突(conflicts)。改完之后,你需要执行如下命令以将它们标记为合并成功:
git add <filename>
1
在合并改动之前,你可以使用如下命令预览差异:
git diff <source_branch> <target_branch>

6、标签

1
为软件发布创建标签是推荐的。这个概念早已存在,在 SVN 中也有。你可以执行如下命令创建一个叫做 1.0.0 的标签:
git tag 1.0.0 1b2e1d63ff
1b2e1d63ff 是你想要标记的提交 ID 的前 10 位字符。可以使用下列命令获取提交 ID
git log
你也可以使用少一点的提交 ID 前几位,只要它的指向具有唯一性。

6、替换本地改动

假如你操作失误(当然,这最好永远不要发生),你可以使用如下命令替换掉本地改动:
git checkout -- <filename>
此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到暂存区的改动以及新文件都不会受到影响。

假如你想丢弃你在本地的所有改动与提交,可以到服务器上获取最新的版本历史,并将你本地主分支指向它:
git fetch origin
git reset --hard origin/master

7、实用小贴士

内建的图形化 git
gitk
彩色的 git 输出:
git config color.ui true
显示历史记录时,每个提交的信息只显示一行:
git config format.pretty oneline
交互式添加文件到暂存区:
git add -i

7、查看仓库

经常用于版本恢复,先查看仓库然后 reset

git log --oneline
或者用:
git log --oneline --decorate --graph --all
然后
git reset --hard xxxxx xxxxx

或者修改别名 查看历史记录 执行:

git config --global alias.lg "log --graph --all --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"

以后使用命令 : git lg 就可以查看历史版本了!

8 、修改不用密码提交

1 、查看是否有生成秘药:

1
ls -al ~/.ssh

2、如果已经生成 id_rsa.pub 则直接:

1
pbcopy < ~/.ssh/id_rsa.pub

否则

```ssh-keygen -t rsa -C “youremail@example.com” 然后一路回车,最后生成 然后拷贝

1
2
3
4
5
3、在远程仓储添加复制的公钥

4、执行以下语句

  1. git remote rm origin
  2. git remote add origin git@github.com:yuquan0821/demo.git
  3. git push origin ```

9 、与主干同步

分支的开发过程中,要经常与主干保持同步。

1
2
$ git fetch origin
$ git rebase origin/master

10 、添加标签 tag

参考地址

1
2
3
 git tag -a v1.0 -m '可以直接使用的项目'
 -m后面带的就是注释信息,这样在日后查看的时候会很有用
git push origin --tags

11、指定 clone 分支

参考地址

1
git clone -b cy git@git.coding.net:SeongBrave/myTest.git

进阶学习

1、Configuration(配置)

1
git config [--global] user.name       设置提交时附带的名字(Set the name attached to all                                                                your commits)
1
git config [--global] user.email        设置提交时附带的email(Set the email attached to all                                                              your commits)
1
git config --global color.ui auto       设置命令行输出回执的颜色(Set colorzition of                                                                         command line output for all repos)
1
git config [--global] user.name         获取当前库设置的用户名(Print set name(in current                                                                repository or globally))
1
git config [--global] user.email        获取当前库设置的email(Print set email(in current                                                                 repository or  globally))

2、Local Changes(本地操作)

1
git status    查看工作区内的文件修改(List changed files in your working directory)
1
git diff       查看已追踪文件的修改(List changed to tracked files)
1
git add       添加此文件的所有修改在下次提交时(Add all current changed in file to the next                      commit)
1
git add .     添加本地库中的所有修改在下次提交的时(Add all current changed to the next                          commit)
1
git mv          修改文件名并添加到下次提交当中(Rename file and add it to next commit)
1
git rm          删除此文件并将此处删除添加到下次提交当中(Delete file and add its deletion                           to next commit)
1
git commit -a          提交工作区所有文件(Commit all local changes in tracked files)

3、Commit History(提交历史)

1
git log                                             显示所有的提交日志(Show all commits)
1
git log -p                                       这个文件的最后一次提交日志(Shwo changes over                                                                   time for a specific file)
1
git log --author=<committer name>  这个提交者最后一次的提交日志(Show changes over                                                                time for a specific committer)
1
git blame <file>                              此文件被谁修改了(Who changed what and when in file)
1
git stash                                           查看临时的文件变动 (Store changes temporarily)
1
git stash pop                                    删除上一次记录储蓄新的改动记录(Remove and apply                                                              changes)
1
git rm --cached <file>                  把此文件从过去的提交记录中删除但是保留当前本地的                                                             文件(Remvoe file from previous commits but keep it                                                           locally)

4、Branches & Tags(分支和标签)

1
git branch                                 本地所有的分支列表(List all existing branches)
1
git checkout <branch>            切换分支(Switch HEAD branch)
1
git branch <new branch>        创建新分支(Creat a new branch based on your current                                                         HEAD)
1
git branch --track <new-branch><remote-branch>  创建一个新的分支基于一个远程的                                                                                       分支(Creat a new  tracking branch                                                                                       based on a remote branch)
1
git branch -d <branch>                          删除一个本地分支(Delete a local branch)
1
git branch origin --delete <branch>       删除一个远程分支(Delete a remote branch)
1
git push <remote> : <old name>           重命名远程分支名(Rename a branch on             git push <remote> <new name>              remote)git push
1
git tag <tag-name>                                  给当前提交打一个tag,也可以查看当前标签(Tag                                                                        the current commit)

5、Update & Publish(更新和提交)

1
git remote -v                         查看远程库的地址列表(List all currently configured remotes)
1
git remote show <remote>       查看这个远程库的信息(Show information about a remote)
1
git remote add <remote> <url> 添加新的远程库(Add new remote repository)
1
git remote rename <old-name> <new-name>    重命名远程库(Rename a remote)
1
git fetch <remote>       从远程库更新所有的信息到本地,但是不合并(Download all changes                                        from remote,but don't merge into HEAD)
1
git fetch -p <remote>     从远程库更新所有的信息到本地,但是不合并并清理已删除的远程分                                           支(Download all changes fromm remote,but don't merge in                                               HEAD and clean up deleted branchs from origin)
1
git pull <remote><branch>   从远程库更新数据并立即合并数据(Download changes and                                                       directly merge into HEAD)
1
git push <remote><branch>   将本地数据同步到远程库中(Publish local changes on a                                                           remote)
1
git remote add --track <remote-branch><remote><url>  追踪一个远程库(Track a                                                                                                        remote repository)
1
git push --tags                         同步标签到远程库(Publish your tags
1
git remote show <remote>      显示远程库信息(Show information about a submodule)

6、Merge & Rebase(分支合并和重整数据)

1
git merge <branch>       将其他分支和并到当前分支(Merge branch into your current HEAD)
1
git rebase <branch>          将亲她分支合并到当前分支并按照提交顺序排序(Rebase your                                                   current HEAD onto branch)
1
git rebase --abort             终止当前合并(Abort a rebase)
1
git rebase --continue       解决冲突后继续当前合并和重整(Continue a rebase after                                                           resolving confilcys)
1
git mergetool                      使用配置的合并工具解决冲突(Resolve conflicts using your                                                     configured merge tool)
1
2
3
git add <resolved-file>     手动解决冲突使用编辑器并标记已解决的文件

git rm <resolved-file>

6、Undo(撤销)

1
git reset --hard HEAD                丢弃所有的本地修改(Discard all local changes in your                                                           working directory)
1
git checkout HEAD <file>           丢弃此文件的本地修改(Discard local changes in a specific                                                      file)
1
git revert  <commit>                  撤销某次的提交内容(Revert a commit by providing                                                                 a new commit with contrary changes)
1
git checkout <commit><file>    撤销某次提交的某个文件的内容(Revert a specific file from                                                     a previous commit)

7、 重置头指针到过去的某个提交上,版本回退(Reset your HEAD pointer to a previous commit)

1
git reset --hard  <commit>     回退到某个版本(Discarding local changes)
1
git reset <commit>                   回退到某个版本并保存未追踪的改动
1
git reset --keep <commit>       回退到某个版本并保存未提交的改动

8、 把某一个 commit 拷贝到另外一个分子

1
 git cherry-pick 58aa481
该博客文章由作者通过 CC BY 4.0 进行授权。