git中文教程,腾讯团队实力打造flutter入门教程

复制代码

你可以提取老版本的代码,通过提交的ID。git log命令可以查看提交ID

复制代码

# Switch to home

cd ~/repo01

Get the log

git log

Copy one of the older commits and checkout the older revision via 译者注:checkout 后加commit id就是把commit的内容复制到index和工作副本中

git checkout commit_name

复制代码

如果你还未把更改加入到索引中,你也可以直接还原所有的更改

复制代码

#Some nonsense change

echo “nonsense change” > test01

Not added to the staging index. Therefore we can

just checkout the old version

#译者注:checkout后如果没有commit id号,就是从index中拷贝数据到工作副本,不涉及commit部分的改变

git checkout test01

Check the result

cat test01

Another nonsense change

echo “another nonsense change” > test01

We add the file to the staging index

git add test01

Restore the file in the staging index

#译者注:复制HEAD所指commit的test01文件到index中

git reset HEAD test01

Get the old version from the staging index

#译者注:复制index中test01到工作副本中

git checkout test01

#译者注,以上两条命令可以合并为git checkout HEAD test01

复制代码

也可以通过revert命令进行还原操作

# Revert a commit

git revert commit_name

即使你删除了一个未添加到索引和提交的文件,你也可以还原出这个文件

# Delete a file

rm test01

Revert the deletion

git checkout test01

如果你已经添加一个文件到索引中,但是未提交。可以通过git reset file 命令将这个文件从索引中删除

复制代码

// Create a file

touch incorrect.txt

// Accidently add it to the index

git add .

// Remove it from the index

git reset incorrect.txt

// Delete the file

rm incorrect.txt

复制代码

如果你删除了文件夹且尚未提交,可以通过以下命令来恢复这个文件夹 。译者注:即使已经提交,也可以还原

git checkout HEAD – your_dir_to_restore

译者注:checkout和reset这两个命令的含义是不同的,可以参阅这篇文章http://marklodato.github.com/visual-git-guide/index-en.html

7. 标记


Git可以使用对历史记录中的任一版本进行标记。这样在后续的版本中就能轻松的找到。一般来说,被用来标记某个发行的版本

可以通过git tag命令列出所有的标记,通过如下命令来创建一个标记和恢复到一个标记

git tag version1.6 -m ‘version 1.6’

git checkout <tag_name>

8. 分支、合并


8.1. 分支

通过分支,可以创造独立的代码副本。默认的分支叫master。Git消耗很少的资源就能创建分支。Git鼓励开发人员多使用分支

下面的命令列出了所有的本地分支,当前所在的分支前带有*号

git branch

如果你还想看到远端仓库的分支,可以使用下面的命令

git branch -a

可以通过下面的命令来创建一个新的分支

复制代码

# Syntax: git branch

in the above is optional

if not specified the last commit will be used

If specified the corresponding commit will be used

git branch testing

Switch to your new branch

git checkout testing

Some changes

echo “Cool new feature in this branch” > test01

git commit -a -m “new feature”

Switch to the master branch

git checkout master

Check that the content of test01 is the old one

cat test01

复制代码

8.2. 合并

通过Merge我们可以合并两个不同分支的结果。Merge通过所谓的三路合并来完成。分别来自两个分支的最新commit和两个分支的最新公共commit

可以通过如下的命令进行合并

# Syntax: git merge

git merge testing

一旦合并发生了冲突,Git会标志出来,开发人员需要手工的去解决这些冲突。解决冲突以后,就可以将文件添加到索引中,然后提交更改

8.3. 删除分支

删除分支的命令如下:

#Delete branch testing

git branch -d testing

Check if branch has been deleted

git branch

8.4. 推送(push)一个分支到远端仓库

默认的,Git只会推送匹配的分支的远端仓库。这意味在使用git push命令默认推送你的分支之前,需要手工的推送一次这个分支。

复制代码

# Push testing branch to remote repository

git push origin testing

Switch to the testing branch

git checkout testing

Some changes

echo “News for you” > test01

git commit -a -m “new feature in branch”

Push all including branch

git push

复制代码

通过这种方式,你可以确定哪些分支对于其他仓库是可见的,而哪些只是本地的分支

9. 解决合并冲突


如果两个不同的开发人员对同一个文件进行了修改,那么合并冲突就会发生。而Git没有智能到自动解决合并两个修改

在这一节中,我们会首先制造一个合并冲突,然后解决它,并应用到Git仓库中

下面会产生一个合并冲突

复制代码

# Switch to the first directory

cd ~/repo01

Make changes

touch mergeconflict.txt

echo “Change in the first repository” > mergeconflict.txt

Stage and commit

git add . && git commit -a -m “Will create merge conflict 1”

Switch to the second directory

cd ~/repo02

Make changes

touch mergeconflict.txt

echo “Change in the second repository” > mergeconflict.txt

Stage and commit

git add . && git commit -a -m “Will create merge conflict 2”

Push to the master repository

git push

Now try to push from the first directory

Switch to the first directory

cd ~/repo01

Try to push --> you will get an error message

git push

Get the changes

git pull origin master

复制代码

Git将冲突放在收到影响的文件中,文件内容如下:

<<<<<<< HEAD

Change in the first repository

=======

Change in the second repository

>>>>>>> b29196692f5ebfd10d8a9ca1911c8b08127c85f8

上面部分是你的本地仓库,下面部分是远端仓库。现在编辑这个文件,然后commit更改。另外的,你可以使用git mergetool命令

# Either edit the file manually or use

git mergetool

You will be prompted to select which merge tool you want to use

For example on Ubuntu you can use the tool “meld”

After merging the changes manually, commit them

git commit -m “merged changes”

10. 变基(Rebase)


10.1. 在同一分支中应用Rebase Commit

通过rebase命令可以合并多个commit为一个。这样用户push更改到远端仓库的时候就可以先修改commit历史

接下来我们将创建多个commit,然后再将它们rebase成一个commit

复制代码

# Create a new file

touch rebase.txt

Add it to git

git add . && git commit -m “rebase.txt added to index”

Do some silly changes and commit

echo “content” >> rebase.txt

git add . && git commit -m “added content”

echo " more content" >> rebase.txt

git add . && git commit -m “added more content”

echo " more content" >> rebase.txt

git add . && git commit -m “added more content”

echo " more content" >> rebase.txt

git add . && git commit -m “added more content”

echo " more content" >> rebase.txt

git add . && git commit -m “added more content”

echo " more content" >> rebase.txt

git add . && git commit -m “added more content”

Check the git log message

git log

复制代码

我们合并最后的七个commit。你可以通过如下的命令交互的完成

git rebase -i HEAD~7

这个命令会打开编辑器让你修改commit的信息或者 squashfixup最后一个信息

Squash会合并commit信息而fixup会忽略commit信息(待理解)

10.2. Rebasing多个分支

你也可以对两个分支进行rebase操作。如下所述,merge命令合并两个分支的更改。rebase命令为一个分支的更改生成一个补丁,然后应用这个补丁到另一分支中

使用merge和rebase,最后的源代码是一样的,但是使用rebase产生的commit历史更加的少,而且历史记录看上去更加的线性

复制代码

# Create new branch

git branch testing

Checkout the branch

git checkout testing

Make some changes

echo “This will be rebased to master” > test01

Commit into testing branch

git commit -a -m “New feature in branch”

Rebase the master

git rebase master

复制代码

10.3.Rebase最佳实践

在push更改到其他的Git仓库之前,我们需要仔细检查本地分支的commit历史

在Git中,你可以使用本地的commit。开发人员可以利用这个功能方便的回滚本地的开发历史。但是在push之前,需要观察你的本地分支历史,是否其中有些commit历史对其他用户来说是无关的

如果所有的commit历史都跟同一个功能有关,很多情况下,你需要rebase这些commit历史为一个commit历史。

交互性的rebase主要就是做重写commit历史的任务。这样做是安全的,因为commit还没有被push到其它的仓库。这意味着commit历史只有在被push之前被修改

如果你修改然后push了一个已经在目标仓库中存在的commit历史,这看起来就像是你实现了一些别人已经实现的功能

11. 创建和应用补丁


一个补丁指的是一个包含对源代码进行修改的文本文件。你可以将这个文件发送给某人,然后他就可以应用这个补丁到他的本地仓库

下面会创建一个分支,对这个分支所一些修改,然后创建一个补丁,并应用这个补丁到master分支

复制代码

# Create a new branch

git branch mybranch

Use this new branch

git checkout mybranch

Make some changes

touch test05

Change some content in an existing file

echo “New content for test01” >test01

Commit this to the branch

git add .

git commit -a -m “First commit in the branch”

Create a patch --> git format-patch master

git format-patch origin/master

This created patch 0001-First-commit-in-the-branch.patch

Switch to the master

git checkout master

Apply the patch

git apply 0001-First-commit-in-the-branch.patch

Do your normal commit in the master

git add .

git commit -a -m “Applied patch”

Delete the patch

rm 0001-First-commit-in-the-branch.patch

复制代码

12. 定义同名命令


Git允许你设定你自己的Git命令。你可以给你自己常用的命令起一个缩写命令,或者合并几条命令道一个命令上来。

下面的例子中,定义了git add-commit 命令,这个命令合并了`git add . -A` 和`git commit -m` 命令。定义这个命令后,就可以使用git add-commit -m "message" 了.

git config --global alias.add-commit ‘!git add . -A && git commit’

但是非常不幸,截止写这篇文章之前,定义同名命令在msysGit中还没有支持。同名命令不能以!开始。

13. 放弃跟踪文件


有时候,你不希望某些文件或者文件夹被包含在Git仓库中。但是如果你把它们加到.gitignore文件中以后,Git会停止跟踪这个文件。但是它不会将这个文件从仓库中删除。这导致了文件或者文件夹的最后一个版本还是存在于仓库中。为了取消跟踪这些文件或者文件夹,你可以使用如下的命令

# Remove directory .metadata from git repo

git rm -r --cached .metadata

Remove file test.txt from repo

git rm --cached test.txt

这样做不会将这些文件从commit历史中去掉。如果你想将这些文件从commit历史中去掉,可以参考git filter-branch命令

14. 其他有用的命令


下面列出了在日常工作中非常有用的Git命令

Table 2. 有用的Git命令

| 命令 | 描述 |

| :-- | :-- |

| git blame filename | 谁创建了或者是修改了这个文件 |

| git checkout -b mybranch master~1 | 以上上个commit信息为起点,创建一条新的分支 |

15. 安装Git服务


如上所述,我们的操作不需要Git服务。我可以只使用文件系统或者是Git仓库的提供者,像Github或Bitbucket。但是,有时候,拥有一个自己的服务是比较方便的,在ubuntu下安装一个服务相对来说是比较容易的

确定你已经安装了ssh

apt-get install ssh

如果你还没有安装Git服务,安装它

sudo apt-get install git-core

添加一个名为git的用户

sudo adduser git

然后使用git用户进行登陆,创建一个空的仓库

# Login to server

to test use localhost

ssh git@IP_ADDRESS_OF_SERVER

Create repository

git init --bare example.git

现在你就可以向远端的仓库提交变更了

复制代码

mkdir gitexample

cd gitexample

git init

touch README

git add README

git commit -m ‘first commit’

git remote add origin git@IP_ADDRESS_OF_SERVER:example.git

git push origin master

复制代码

16. 在线的远端仓库


16.1. 克隆远端仓库

Git支持远端的操作。Git支持多种的传输类型,Git自带的协议就叫做git。下面的的命令通过git协议从克隆一个仓库

git clone git@github.com:vogella/gitbook.git

同样的,你可以通过http协议来克隆仓库

# The following will clone via HTTP

git clone http://vogella@github.com/vogella/gitbook.git

16.2. 添加远端仓库

如果你克隆了一个远端仓库,那么原先的仓库就叫做origin

你可以push修改到origin中,通过 git push origin 命令. 当然,push到一个远端的仓库需要对仓库的写权限

你可以通过git remote add name gitrepo 命令添加多个仓库。例如,你可以通过http协议再次添加之前clone过来的仓库:

// Add the https protocol

git remote add githttp https://vogella@github.com/vogella/gitbook.git

16.3. 通过http和代理服务器进行远端操作

如果你的防火墙屏蔽了出http以外的所有协议,那么使用http协议来获取仓库是非常好的方法。.

Git同样支持通过代理服务器使用http协议。下面的Git命令会展示这一点。你可以为所有的程序设置代理服务器或者只是为Git服务提供。

下面的例子用到了环境变量

复制代码

# Linux

export http_proxy=http://proxy:8080

# On Windows

Set http_proxy=http://proxy:8080

git clone http://dev.eclipse.org/git/org.eclipse.jface/org.eclipse.jface.snippets.git

# Push back to the origin using http

git push origin

复制代码

下面的例子只是用到了Git的配置

复制代码

// Set proxy for git globally

git config --global http.proxy http://proxy:8080

// To check the proxy settings

git config --get http.proxy

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

最后

我坚信,坚持学习,每天进步一点,滴水穿石,我们离成功都很近!
以下是总结出来的字节经典面试题目,包含:计算机网络,Kotlin,数据结构与算法,Framework源码,微信小程序,NDK音视频开发,计算机网络等。

字节高级Android经典面试题和答案


领取方法:

所有资料获取方式:评论666+点赞即可咨询资料免费领取方式!

直达领取链接:【Android高级架构师】文件夹下载!

8572 “复制代码”)

// Set proxy for git globally

git config --global http.proxy http://proxy:8080

// To check the proxy settings

git config --get http.proxy

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-zUYgWFuK-1711184731701)]
[外链图片转存中…(img-g2CHKmR7-1711184731701)]
[外链图片转存中…(img-qu0aowYW-1711184731701)]
[外链图片转存中…(img-bMHBV8dg-1711184731702)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-hCXX2iFc-1711184731702)]

最后

我坚信,坚持学习,每天进步一点,滴水穿石,我们离成功都很近!
以下是总结出来的字节经典面试题目,包含:计算机网络,Kotlin,数据结构与算法,Framework源码,微信小程序,NDK音视频开发,计算机网络等。

字节高级Android经典面试题和答案

[外链图片转存中…(img-LyB2NSDw-1711184731702)]
[外链图片转存中…(img-XvlzAIuN-1711184731702)]

领取方法:

所有资料获取方式:评论666+点赞即可咨询资料免费领取方式!

直达领取链接:【Android高级架构师】文件夹下载!

  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值